第9章系统安全管理9.1SQLServer2000的身份认证模式9.1SQLServer2000的身份认证模式 9.2.1WindowsNT认证模式登录账号的建立与取消9.2.1WindowsNT认证模式登录账号的建立与取消9. 2.1WindowsNT认证模式登录账号的建立与取消9.2.1WindowsNT认证模式登录账号的建立与取消9.2.1 WindowsNT认证模式登录账号的建立与取消9.2.2混合认证模式下SQLServer登录账号的建立与删除9.2.2 混合认证模式下SQLServer登录账号的建立与删除9.2.2混合认证模式下SQLServer登录账号的建立与删除9. 2.2混合认证模式下SQLServer登录账号的建立与删除9.2.2混合认证模式下SQLServer登录账号的建立与删除 9.3.1固定服务器角色9.3.1固定服务器角色9.3.1固定服务器角色9.3.1固定服务器角色9.3.2固 定数据库角色9.3.2固定数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3 用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色 9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自 定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3 .3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据 库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色9.3.3用户自定义数据库角色习题 【例9.15】在数据库XSCJ中,用户zhang拥有对表XS的所有操作权限,zhang将表XS的SELECT权限 授予Accounting角色(指定WITHGRANTOPTION子句)。用户li是Accounting的成员, 要将表XS上的SELECT权限授予用户huang,huang不是Accounting的成员。/用户zhang/ GRANTSELECTONXSTOAccountingWITHGRANTOPTION/用户li/GRA NTSELECTONXSTOhuangASAccounting/由于li是Accounting角色的成员,因 此必须用AS子句对huang授予权限。/【例9.16】在当前数据库XSCJ中给public角色赋予对表XS中学号、姓名 字段的SELECT权限。USEXSCJGRANTSELECT(学号,姓名)ONXSTOpublicGO语法 格式:DENY{ALL|statement[,...n]}TOsecurity_account[,... n]拒绝对象权限。语法格式:DENY???{ALL[PRIVILEGES]|permission[,... n]}????{????????[(column[,...n])]ON{table|view} ????????|ON{table|view}[(column[,...n])]????????| ON{stored_procedure|extended_procedure}????????|ON{user _defined_function}????}TOsecurity_account[,...n][CASC ADE]【例9.17】对多个用户不允许使用CREATEDATABASE和CREATETABLE语句。DENYC REATEDATABASE,CREATETABLETOzhang,wang,[Nanjing\liu]GO【例9 .18】首先给public角色授予对于表XS的SELECT权限,然后,拒绝用户zhang,wang,[Nanjin g\liu]的特定权限,这样,这些用户就没有对XS表的操作权限了。USEXSCJGOGRANTSELECTONXS TOpublicGODENYSELECT,INSERT,UPDATE,DELETEONXSTOzhang, wang,[Nanjing\liu]GO【例9.19】对所有Accouting角色成员拒绝CREATETABLE 权限。DENYCREATETABLETOAccountingGO语法格式:REVOKE{ALL|state ment[,...n]}FROMsecurity_account[,...n]取消以前授予或拒绝的对象权限。 语法格式:REVOKE[GRANTOPTIONFOR]????{ALL[PRIVILEGES]|permi ssion[,...n]}{???[(column[,...n])]ON{table|view }????????|ON{table|view}[(column[,...n])]??????? ?|ON{stored_procedure|extended_procedure}????????|ON{us er_defined_function}}{TO|FROM}????security_account[,... n][CASCADE][AS{group|role}]【例9.20】取消已授予用户zhang和 Nanjing\liu的CREATETABLE权限。REVOKECREATETABLEFROMzhang,[N anjing\liu]GO【例9.21】取消授予多个用户的多个语句权限。REVOKECREATETABLE,CREAT EDEFAULTFROMwang,liuGO【例9.22】取消以前对zhang授予或拒绝的权限。REVOKESE LECTONXSFROMzhang【例9.23】在数据库XSCJ中,用户zhang拥有表XS的操作权限,zhang 将表XS的SELECT权限授予ROLE角色。用户li是ROLE的成员,他要将已授予用户huang的在表XS上的SE LECT权限取消,huang不是ROLE的成员。/Userzhang/GRANTSELECTONXST OROLEWITHGRANTOPTION/Userli/GRANTSELECTONXSTOhuang ASROLE/Userli/REVOKESELECTONXSTOhuangASROLE/用户li 是角色ROLE的成员,通过用户li取消权限时,必须用AS指定其所属的角色/3.数据库用户、角色的删除1)删除数据库用户 在企业管理器中删除数据库用户很简单,直接在目录树的某一数据库结点下,选中须删除的用户项目,按“Del”键即可。语法格式:sp_ revokedbaccess[@name_in_db=]''name''参数含义:@name_in_db=:常量字符串 ;''name'':指要删除的数据库帐户名。返回值:0(成功)或1(失败)说明:(1)在用户定义事务内部不能执行sp_r evokedbaccess。(2)只有sysadmin固定服务器角色成员及db_accessadmin和db_owner 固定数据库角色成员才能执行sp_revokedbaccess。【例9.24】从当前数据库中删除用户帐户’DLGC-YPOOL0 LRW4\liu’。USEXSCJEXECsp_revokedbaccess’DLGC-YPOOL0LRW4\liu’ GO2)删除数据库角色要删除用户自定义的数据库角色,首先应删除该角色的所有成员,下面介绍删除数据库角色成员及删除数据库角色的系 统存储过程。语法格式:sp_droprolemember[@rolename=]''role'',?[@member name=]''security_account''参数含义:''role'':当前数据库的一个角色名。''security_a ccount'':指将要从''role''所指角色中删除的用户账号,security_account可以是当前数据库用户或另一个角色。 返回值:0(成功)或1(失败)(1)对用户登录进行身份认证(Authentication)。当用户登录到数据库 系统时,系统对该用户的账号和口令进行认证(2)对用户进行的操作进行权限控制。当用户登录到数据库后,只能对数据库中 的数据在允许的权限内进行操作。个用户如果要对某一数据库进行操作,必须满足以下三个条件:(1)登录SQLServer服 务器时必须通过身份验证;(2)必须是该数据库的用户,或者是某一数据库角色的成员;(3)必须有执行该操作的权限。 SQLServer2000有两种身份认证模式:WindowsNT认证模式和SQLServer认证模式1.Windows NT认证模式(1)必须将NT网络账号加入到SQLServer中,才能采用NT网络账号登录SQLServer。(2)如 果使用NT网络账号登录到另一个网络的SQLServer,必须在NT网络中设置彼此的托管权限。2.SQLServer认证模式 在SQLServer认证模式下,SQLServer服务器要对登录的用户进行身份验证。对于Windows9 x系列的操作系统只能使用SQLServer认证模式,而当SQLServer在WindowsNT或Windows2000/ 2003上运行时,系统管理员设定登录认证模式的类型可为WindowsNT认证模式和混合模式。1.通过企业管理器建立Wind owsNT认证模式的登录账号对于WindowsNT或Windows2000/2003操作系统,安装本地SQLServer 2000的过程中,允许选择认证模式。第1步创建Windows2003的用户。以管理员身份,登录到Windows2003 ,选择“开始”?“所有程序”?“管理工具”?“计算机管理”,进入如图9.2所示的界面,选择“本地用户和组”。选择“用户”图标右击, 出现一快捷菜单,选择菜单项“新用户”,进入如图9.3所示的界面,输入用户名、密码,选择“创建”按钮,然后选择“关闭”按钮。第2 步将NT网络账号加入到SQLServer中:以管理员身份登录到SQLServer,进入企业管理器,选择如图9.4中的“登录” 图标右击,出现快捷菜单,选择“新建登录”,出现如图9.5所示的界面,点击“常规”选项卡的“浏览”按钮,可选择用户名或用户组添加到S QLServer登录用户列表中。2.通过SQL命令建立WindowsNT认证模式的登录账号语法格式:sp_grantl ogin[@loginame=]''login''参数含义:@loginame=:原样输入的常量字符串。''login'': 指要添加的WindowsNT或Windows2000用户或组的名称。【例9.1】将WindowsNT域Nanjin g中的chengfang用户加入到SQLServer中。EXECsp_grantlogin''Nanjing\chen gfang''或EXECsp_grantlogin[Nanjing\chengfang]3.WindowsNT 认证模式登录账号的取消通过执行系统存储过程sp_revokelogin可取消WindowsNT用户或组登录SQLServ er的账号。语法格式:sp_revokelogin[@loginame=]''login''参数含义:@login ame=:常量字符串;''login'':WindowsNT用户或组的名称,为域\用户形式返回值:0(成功)或1(失败 )。【例9.2】取消WindowsNT用户Nanjing\chengfang登录SQLServer的账号。EXEC sp_revokelogin‘Nanjing\chengfang’或EXECsp_revokelogin[Nanjing \chengfang]第1步在企业管理器中,选择要登录的SQLServer服务器图标右击,出现一快捷菜单,选择菜单项“属性” ,出现如图9.6的SQLServer服务器属性配置窗口。第2步选择“安全性”选项卡,如图所示,选择身份验证为“SQLSer ver与Windows”,选择“确定”按钮。设置混合认证方式后,如何创建SQLServer的登录账号呢?可在企业管理器中创建 ,利用系统存储过程创建。1.通过企业管理器创建SQLServer登录账号步骤如下:第1步在企业管理器中选择“登录”图标右 击,出现如图9.4的界面,选择“新建登录”菜单项,进入如图9.8的界面;第2步输入账号名、密码,选择“SQLServer身份 验证”方式,选择“确定”按钮。2.利用系统存储过程创建SQLServer登录账号语法格式:sp_addlogin[@ loginame=]''login''????[,[@passwd=]''password'']????[,[ @defdb=]''database'']????[,[@deflanguage=]''language''] ????[,[@sid=]sid]????[,[@encryptopt=]''encryption_op tion'']【例9.4】创建登录ID为wang,密码为’dongdong’,并指定默认数据库为XSCJ。为用户cheng 创建一个SQLServer登录名,密码为''chocolate'',默认数据库为pubs,默认语言为us_english,SI D为:0x0123456789ABCDEF。EXECsp_addlogin''wang'',''dongdong'',''XSCJ ''EXECsp_addlogin''cheng'',''chocolate'',''pubs'',''us_english'',0x 0123456789ABCDEF3.SQLServer登录账号的删除利用sp_droplogin系统存储过程可删除SQL Server登录账号。语法格式:sp_droplogin[@loginame=]''login''参数含义:''log in'':将被删除的登录账号名。返回值:0(成功)或1(失败)。SQLServer提供了以下固定服务器角色:sysadm in:系统管理员,可对SQLServer服务器进行所有的管理工作,为最高管理角色。securityadmin:安全管理员,可以 管理登录和CREATEDATABASE权限,还可以读取错误日志和更改密码。serveradmin:服务器管理员,具有对服务 器进行设置及关闭服务器的权限。setupadmin:设置管理员,添加和删除链接服务器,并执行某些系统存储过程(如sp_serv eroption)。processadmin:进程管理员,可以管理磁盘文件。dbcreator:数据库创建者,可以创建、更改和 删除数据库。bulkadmin:可执行BULKINSERT语句,但是这些成员对要插入数据的表必须有INSERT权限。BULK INSERT语句的功能是以用户指定的格式复制一个数据文件至数据库表或视图。通过企业管理器添加服务器角色成员第1步以系统管 理员身份登录到SQLServer服务器,在登录图标对应的列表项中,选择登录账号“DLGC-YPOOLOLRW4\LIU”的项目双 击;第2步选择“服务器角色”选项卡,如图所示,选项卡中列出了SQLServer所有的固定服务器角色,将“Systemad ministrators”服务器角色前的复选框选中。2.利用系统存储过程添加固定服务器角色成员语法格式:sp_addsr vrolemember[@loginame=]''login'',?[@rolename=]''role''参数含义:l ogin:添加到固定服务器角色role的登录账号名,login可以是SQLServer登录或WindowsNT用户账号, 对于WindowsNT登录账号,如果还没有授予SQLServer访问权限,将自动对其授予访问权限。固定服务器角色名ro le必须为sysadmin,securityadmin,serveradmin,setupadmin,processadmin,d iskadmin,dbcreator,bulkadmin之一。返回值:0(成功)或1(失败)。3.利用系统存储过程删除固 定服务器角色成员利用sp_dropsrvrolemember系统存储过程可从固定服务器角色中删除SQLServer登录账号或 WindowsNT用户或组。语法格式:sp_dropsrvrolemember[@loginame=]''login '',[@rolename=]''role''参数含义:''login'':将要从固定服务器角色删除的登录账号名。''rol e'':服务器角色名,默认值为NULL,role必须是有效的固定服务器角色名。返回值:0(成功)或1(失败)【例9.7】从 sysadmin固定服务器角色中删除登录zhang。EXECsp_dropsrvrolemember''zhang'', ''sysadmin''也可在企业管理器中删除固定服务器角色成员,请读者试一试。1.固定数据库角色(1)db_owner:数据 库所有者,可执行数据库的所有管理操作(2)db_accessadmin:数据库访问权限管理者,具有添加、删除数据库使用者、 数据库角色和组的权限。(3)db_securityadmin:数据库安全管理员,管理数据库中的权限,如设置数据库表的增、删、修改 和查询等存取权限。(4)db_ddladmin:数据库DDL管理员,增加、修改或删除数据库中对象。(5)db_backupop erator:数据库备份操作员,执行数据库备份的权限。(6)db_datareader:数据库数据读取者。(7)db_data writer:数据库数据写入者,对表进行增、删修改的权限。(8)db_denydatareader:数据库拒绝数据读取者,不能读 取数据库中任何表的内容(9)db_denydatawriter:数据库拒绝数据写入者,不能对任何表进行增、删修改操作。(10) public:是一个特殊的数据库角色,每个数据库用户都是public角色的成员。2.数据库用户的操作权限(1)在当前数据 库中创建数据库对象及进行数据库备份的权限,主要有:创建表、视图、存储过程、规则、缺省值对象、函数的权限及备份数据库、日志文件的权限 。(2)用户对数据库表的操作权限及执行存储过程的权限,主要有:SELECT:对表或视图执行SELECT 语句的权限;INSERT:对表或视图执行INSERT语句的权限;UPDATE:对表或视图执 行UPDATE语句的权限;DELETE:对表或视图只DELETE语句的权限;REFER ENCES:用户对表的主键和唯一索引字段生成外码引用的权限;EXECUTE:执行存储过程的权限。(3)用户 对数据库中指定表字段的操作权限,主要有:SELECT:对表字段进行查询操作的权限;UPDATE:对表 字段进行更新操作的权限。1.通过企业管理器创建数据库角色第1步创建数据库角色:以系统管理员身份登录SQLServer,并进 入企业管理器,选中目录树XSCJ数据库结点的“角色”图标右击,出现如图所示快捷菜单,选择“新建数据库角色”,进入如图的界面,输 入角色名,选择确定按钮。第2步创建数据库用户并加入数据库角色。第3步给数据库角色赋予创建数据库对象的权限:在企业管理器目 录树中,选择XSCJ数据库结点右击,出现一快捷菜单,选择菜单项“属性”,进入如图所示的界面,选择“权限”选项卡,根据需要,选中允许 数据库角色或数据库用户执行的权限。第4步给数据库角色赋予表操作权限:在企业管理器的目录树中,选择XSCJ数据库结点下角色图标的 项目“ROLE1”双击,出现如图所示的界面,选择“权限”按钮,进入如图所示的界面,根据允许的操作可设置相应的权限。图数据库表操 作权限设置窗口图表的列操作权限设置窗口2.通过SQL命令创建数据库角色1)定义数据库角色语法格式 :sp_addrole[@rolename=]''role''???[,[@ownername=]''owner '']参数含义:''role'':新的数据库角色名,role必须是有效标识符,并且不能已经存在于当前数据库中。''owner'': 新角色的所有者,默认值为dbo。owner必须是当前数据库中的某个用户或角色。当指定WindowsNT用户时,应指定该W indowsNT用户在数据库中可被识别的名称(用sp_grantdbaccess添加)。返回值:0(成功)或1(失败) 。说明:(1)角色名可以包括字母、符号及数字。但是不能含有反斜线(\)。(2)不能在用户定义的事务内使用sp_add role。(3)只有sysadmin固定服务器角色及db_securityadmin和db_owner固定数据库角 色的成员才能执行sp_addrole。【例9.8】如下示例在当前数据库中创建名为ROLE1的新角色。USEXSCJEX ECsp_addrole''ROLE1''2)将一个登录账号添加为某个数据库的用户利用系统存储过程sp_grantdbacce ss可将一个登录账号添加为某个数据库的用户。语法格式:sp_grantdbaccess[@loginame=]''logi n''??[,[@name_in_db=]''name_in_db'']参数含义:''login'':SQLServer的登录账号 ,WindowsNT组和用户必须用WindowsNT域名限定,格式为“域\用户”,例如Nanjing\zhang。'' name_in_db'':数据库用户名,如果没有指定,则使用登录账号作为数据库用户名。返回值:0(成功)或1(失败)。说明: (1)数据库用户名可含有字母、符号和数字。但不能包含反斜线,不能为NULL,也不能为空字符串('''')。(2)sp_g rantdbaccess仅可以在当前数据库中添加用户(账户),若要从数据库中删除账户,使用sp_revokedbaccess。 (3)如果当前数据库中没有guest账户,而且login为guest,则可将guest添加为当前数据库的账户。(4) sa登录不能添加到数据库中。(5)不能从用户定义的事务中执行sp_grantdbaccess。(6)只有sysa dmin固定服务器角色、db_accessadmin和db_owner固定数据库角色的成员才能执行sp_grantdbac cess;(7)存储过程sp_adduser的功能与sp_grantdbaccess的功能相同。【例9.9】将Windows NT登录账号“DLGC-YPOOLOLRW4\liu”添加为当前数据库的账户,并取名为Dongdong。将SQLServ er的登录账号“WANG”添加为当前数据库的账户,并取名为WANG。USEXSCJEXECsp_grantdbacces s''DLGC-YPOOLOLRW4\liu'',''Dongdong''GOEXECsp_grantdbaccess'' WANG''GO3)给数据库角色添加成员语法格式:sp_addrolemember[@rolename=]''rol e'',???[@membername=]security_account''参数含义:''role'':当前数据库中角色名 。''security_account'':添加到角色的数据库用户账号,可以是所有有效的SQLServer用户、当前数据库角色。 返回值:0(成功)或1(失败)【例9.10】将WindowsNT用户DLGC-YPOOLOLRW4\liu添加为X SCJ数据库的用户,用户名为dong,然后再将dong添加到XSCJ数据库的ROLE1角色中。USEXSCJGOEX ECsp_grantdbaccess''DLGC-YPOOLOLRW4\liu'',''dong'' /dong为数据库用户名 /GOEXECsp_addrolemember''ROLE1'',''dong''【例9.11】将SQLServer登录账 号“WANG”添加到当前数据库,其用户名为“WANG”,然后再将“WANG”添加到XSCJ数据库的ROLE1角色中。USEXS CJEXECsp_grantdbaccess''WANG'',''WANG''EXECsp_addrolemember''RO LE1'',''WANG''GO4)数据库用户、角色操作权限的授予、拒绝和收回授予执行T-SQL语句的权限。语法格式:GRA NT{ALL|statement[,...n]}TOsecurity_account[,...n]授予 对数据库对象操作的权限。语法格式:GRANT????{ALL[PRIVILEGES]|permission[,...n]}{??[(column[,...n])]ON{table|view}????????|ON{table|view}[(column[,...n])]????????|ON{stored_procedure|extended_procedure}????????|ON{user_defined_function}}TOsecurity_account[,...n][WITHGRANTOPTION][AS{group|role}]【例9.12】给用户zhang和wang以及WindowsNT组Nanjing\liu授予执行T-SQL语句的权限。GRANTCREATEDATABASE,CREATETABLETOzhang,wang,[Nanjing\liu]/如果用户账号含有空格、反斜杠(\),则要用引号或中括号将安全账号括起来/GO【例9.13】首先在当前数据库XSCJ中给public角色授予SELECT权限。然后,将特定的权限授予用户liu、zhang和dong,使用户有对XS表的所有操作权限。USEXSCJGOGRANTSELECTONXSTOpublicGOGRANTINSERT,UPDATE,DELETEONXSTOliu,zhang,dongGO【例9.14】将CREATETABLE权限授予Accounting角色的所有成员。GRANTCREATETABLETOAccounting |
|