1、第八章第八章SQL Server的安的安全全 学习目标学习目标 l了解SQL Server 2000安全管理机制;l掌握登录帐户和服务器角色的设置;l掌握数据库用户和数据库角色的设置;l掌握权限管理的方法。学习重点学习重点 l登录帐户;l数据库用户;l服务器角色与数据库角色;lSQL Server 2000的权限管理。8.1 SQL Server 2000的安全机制的安全机制lSQL Server 2000的安全机制可以划分为4个等级 8.1 SQL Server 2000的安全机制的安全机制l第一级:客户端操作系统的安全性l第二级:SQL Server 2000登录安全性l若要连接到 Mic
2、rosoft SQL Server 2000 实例,需要给SQL Server 2000客户端应用程序提供下面中的信息:l运行 SQL Server 2000实例的计算机所在的网络名称l实例名(可选,只有在连接到命名实例时才需要)l登录标识符(ID)8.1 SQL Server 2000的安全机制的安全机制lSQL Server 2000提供的身份验证模式有两种,即:l1.Windows身份验证模式l2.Windows和SQL Server验证模式8.1 SQL Server 2000的安全机制的安全机制l第三级:数据库使用的安全性l第四级:数据库对象使用的安全性8.2 登录帐户和服务器角色登
3、录帐户和服务器角色l可以使用企业管理器来设置SQL Server 的身份验证模式 l使用企业管理器添加标准SQL Server登录帐户8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l使用T-SQL添加标准SQL Server登录帐户的语法格式为:lsp_addlogin loginame=login l ,passwd=password l,defdb=database l,deflanguage=language 8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l例8.1创建了一个名叫“zhl”,密码是“88908123”,默认数据库为“
4、students”的标准SQL Server登录帐户 lEXEC sp_addlogin zhl,88908123,studentsl GO8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l使用系统存储过程sp_defaultdb修改默认数据库。l语法格式:lsp_defaultdb loginame=login,defdb=database8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l使用系统存储过程sp_defaultlanguage修改登录帐户的默认语言。l语法格式:l sp_defaultlanguage loginame=log
5、in ,language=language 8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l例8.2 将 pubs 设置为用户 zhl的默认数据库。lEXEC sp_defaultdb zhl,pubsl例8.3 将 zhl帐户连接的默认英语设置为English。lEXEC sp_defaultlanguage,zhl,English8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l使用系统存储过程sp_password修改登录帐户的密码。l语法格式:lsp_passwordold=old_password,new=new_password
6、8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l使用系统存储过程sp_droplogin删除SQL Server标准登录帐户。l语法格式:l sp_droplogin loginame=login8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l在SQL Server中删除帐户信息时,有如下限制:l已经映射到数据库用户的帐户不允许被删除;l系统帐户sa不能被删除,正在使用的帐户不能被删除;l拥有数据库的帐户不能被删除。8.2.2 添加标准添加标准SQL Server 身份登录帐户身份登录帐户l例8.4 将 zhl帐户连接的密码由889081
7、23设置为88999988lEXEC sp_password 88908123,88999988,zhll例8.5 删除zhl标准帐户。l EXEC sp_droplogin,zhl8.2.3 添加添加Windows身份验证登录帐户身份验证登录帐户l添加Windows身份验证登录帐户 l所谓与Windows集成的登录帐户,实际上是将Windows的用户和工作组映射为SQL Server的登录帐户。l使用T-SQL添加Windows登录帐户l语法格式:lsp_grantlogin loginame=login8.2.3 添加添加Windows身份验证登录帐户身份验证登录帐户l例8.6 WINDO
8、WS操作系统中已存在域cdny,用户js,现将其添加为SQL Server登录。lsp_grantlogin cdnyjs或sp_grantlogin cdnyjs 8.2.3 添加添加Windows身份验证登录帐户身份验证登录帐户l使用系统存储过程sp_revokelogin可以从SQL Server中删除用sp_grantlogin创建的Windows用户或组的登录项。l语法格式:lsp_revokelogin loginame=login8.2.3 添加添加Windows身份验证登录帐户身份验证登录帐户l拒绝Windows帐户登录l使用系统存储过程sp_denylogin可以设置不允许W
9、indows的工作组或用户连接SQL Server服务器。l语法格式:lsp_denylogin loginame=login 8.2.3 添加添加Windows身份验证登录帐户身份验证登录帐户l例8.7 删除cdnystudent帐户或工作组的登录。lEXEC sp_revokelogin cdnystudent l例8.8 拒绝cdny/student帐户登录SQL Server。lEXEC sp_denylogin cdnystudent8.2.4 特殊登录帐户特殊登录帐户sal特殊登录帐户sa lsa帐户拥有服务器和所有的数据库,即sa拥有最高的管理权限,可以执行服务器范围内的所有操作
10、。lsa帐户无法删除。8.2.5 服务器角色服务器角色l固定服务器角色用于对登录帐户授予服务器范围内的安全权限。lSystem administrators 可执行SQL Server安装中的任何操作lSecurity administrators 可管理服务器的登录lServer administratorsq 可配置服务器范围的设置lSetup administrators可以管理扩展的存储过程lProcess administrators 可以管理运行在SQL Server中的进程lDisk administrators 可以管理磁盘文件lDatabase creators 可以创建和更
11、改数据库lBulk inset administrators 可以执行大容量插入操作8.2.5 服务器角色服务器角色l使用系统存储过程浏览服务器角色:lSp_helpsrvrolesrvrolename=rolel其中srvrolename=role是指固定服务器角色的名称l例8.9 使用sp_helpsrvrole存储过程浏览本地服务器角色。lEXEC sp_helpsrvrole8.2.5 服务器角色服务器角色l将一个帐户加入一个服务器角色,也可使用系统存储过程sp_addsrvrolemember。l语法格式:lsp_addsrvrolemember loginame=loginrole
12、name=role8.2.5 服务器角色服务器角色l例8.10 将固定服务器角色sysadmin分配给了登录帐户cdnystudent1,使cdnystudent1拥有了角色sysadmin所拥有的所有权限。lEXEC sp_addsrvrolemember cdnystudent1 sysadmin 8.2.5 服务器角色服务器角色l使用系统存储过程浏览固定服务器角色的权限语法格式:lsp_srvrolepermissionsrvrolename=role l例8.11 EXEC sp_srvrolepermission sysadmin -显示sysadmin角色的权限。lEXEC sp_
13、srvrolepermission -显示所有固定服务器角色的权限。8.3.1 数据库用户数据库用户l对于每个要求访问数据库的登录,应将其帐户添加到数据库,成为数据库用户。如果登录帐户不是数据库用户,则登录账户还是无法访问数据库。l1使用企业管理器添加数据库用户l使用T-SQL添加数据库用户8.3.1 数据库用户数据库用户l使用T-SQL添加数据库用户l语法格式:lsp_grantdbaccess loginame=login,name_in_db=name_in_db OUTPUT8.3.1 数据库用户数据库用户l例8.12 在pubs数据库中为 Windows NT 用户 cdnyleij
14、in 添加帐户,并取名为 leijin。lUse pubslGOlEXEC sp_grantdbaccess cdnyleijin,leijinlGO8.3.2 删除数据库用户删除数据库用户l使用企业管理器删除数据库用户l2使用系统存储过程sp_revokedbaccess删除数据库用户l语法格式:lsp_revokedbaccess name_in_db=name8.3.2 删除数据库用户删除数据库用户l例8.13 删除数据库用户leijin。lUSE pubslGOlEXEC sp_revokedbaccess leijinlGO8.3.2 删除数据库用户删除数据库用户l注意:lrevok
15、edbaccess 存储过程不能删除以下内容:ldbo、guest内置用户帐户;l数据库中的固定角色。lWindows NT 组中的 Windows NT 用户。l在用户定义事务内部不能执行 sp_revokedbaccess8.3.3 内置用户帐户内置用户帐户ldbo用户l(1)dbo 是具有在数据库范围内执行一切操作的内置用户。它是数据库的所有者。l(2)固定服务器角色sysadmin的任何成员都映射到每个数据库内称为dbo 的一个特殊用户上。另外,由固定服务器角色sysadmin的任何成员创建的任何对象都自动属于dbo。l(3)无法删除 dbo 用户,且此用户始终出现在每个数据库中。8.
16、3.3 内置用户帐户内置用户帐户l(4)只有由 sysadmin 固定服务器角色成员(或 dbo 用户)创建的对象才属于 dbo。由任何其他也不是 syadmin 固定服务器角色成员的用户(包括 db_owner 固定数据库角色成员)创建的对象:l属于创建该对象的用户,而不是 dbo。l用创建该对象的用户名限定。l(5)它的用户ID(UID)总是18.3.3 内置用户帐户内置用户帐户lguest用户l(1)guest 用户帐户允许没有用户帐户的登录访问数据库。l(2)可以在除 master 和 tempdb 外(在这两个数据库中它必须始终存在)的所有数据库中添加或删除 guest 用户。8.3
17、.3 内置用户帐户内置用户帐户l(3)guest用户的存在意味着所有登录到SQL Server服务器的用户都可以访问数据库,即使它还没有成为本数据库的用户。l(4)默认情况下,新建的数据库中没有 guest 用户帐户。8.3.3 内置用户帐户内置用户帐户l例8.14将 guest 用户帐户添加到名为 students 的数据库中。lUSE studentslGOlEXECUTE sp_grantdbaccess guestlGO8.3.4 数据库角色数据库角色l固定数据库角色是在每个数据库中都存在的预定义组。l数据库管理员可以将一个用户加入到一个或多个数据库角色中。l固定数据库角色不能被添加、
18、修改或删除。lSQL Server在数据库级别上设置了固定数据库角色来提供基本的数据库权限管理。8.3.4 数据库角色数据库角色l固定数据库角色 描述ldb_owner 数据库所有者ldb_accessadmin 数据库访问管理员ldb_securityadmin 数据库安全管理员ldb_ddladmin 数据库 DDL 管理员ldb_backupoperator 数据库备份操作员ldb_datareader 数据库数据读取者ldb_datawriter 数据库数据写入者ldb_denydatareader 数据库拒绝数据读取者ldb_denydatawriter 数据库拒绝数据写入者8.3.
19、5 管理数据库角色管理数据库角色l系统存储过程sp_addrole在当前数据库中创建新的数据库角色l语法格式:lsp_addrole rolename=role,ownername=owner 8.3.5 管理数据库角色管理数据库角色l例8.15 将名为 teacher的新角色添加到studnets数据库中。lEXEC sp_addrole teacher8.3.5 管理数据库角色管理数据库角色l系统存储过程sp_addrolemember将某个数据库用户加入到某个数据库角色中l语法格式:lsp_addrolemember rolename=role,membername=security_a
20、ccount8.3.5 管理数据库角色管理数据库角色l例8.16将数据库用户加入到students数据库teacher角色中lA.添加 Windows NT 用户l将 Windows NT 登录帐户cdnyzhl 添加到 students 数据库,使其成为数据库用户 jszhl。然后,再将 jszhl 添加到students数据库的 teacher 角色中。lUSE studentslGOlEXEC sp_grantdbaccess cdnyzhl,jszhllGOlEXEC sp_addrolemember teacher,jszhl8.3.5 管理数据库角色管理数据库角色lB.添加 SQL
21、 Server 用户l将 SQL Server 用户 leijin添加到studetns数据库中的teacher角色。lEXEC sp_addrolemember teacher,leijin 8.3.5 管理数据库角色管理数据库角色l系统存储过程sp_droprolemember从当前数据库中的数据库角色中删除安全帐户l语法格式:lsp_droprolemember rolename=role,membername=security_account8.3.5 管理数据库角色管理数据库角色l例8.17 从角色teacher 中删除用户leijin。lEXEC sp_droprolemember
22、 teacher,leijin8.3.5 管理数据库角色管理数据库角色l角色应用l(1)public 角色lpublic 角色是一个特殊的数据库角色,每个数据库用户都属于它。lpublic 角色捕获数据库中用户的所有默认权限。l无法将用户、组或角色指派给public 角色,因为默认情况下它们即属于该角色。lpublic 角色含在每个数据库中,包括 master、msdb、tempdb、model 和所有用户数据库。l无法除去public 角色。8.3.5 管理数据库角色管理数据库角色l(2)应用程序角色l应用程序角色是一种特殊的数据库角色。l应用程序角色不包含任何成员,用户不允许添加到该角色中
23、。8.4 权限管理权限管理lSQL Server 2000 中的权限分为三种:对象权限、语句权限和隐含权限l1.对象权限l是指数据库用户对数据库中的表、存储过程、视图等对象的操作权限。l2.隐含权限l是指系统预定义的服务器角色或数据库角色,或数据库所有者和数据库对象所有者拥有的权限。隐含权限不能明确地赋予和撤销。8.4 权限管理权限管理l3.语句权限l指是否可以执行某些T-SQL命令的权限。l具体包括:lCREATE DATABASE:创建一个新数据库及存储该数据库的文件lBACKUP DATABASE:备份整个数据库lBACKUP LOG:备份事务日志lCREATE DEFAULT:创建称为
24、默认值的对象lCREATE FUNCTION:创建用户定义函数lCREATE PROCEDURE:创建存储过程lCREATE RULE:创建规则lCREATE TABLE:创建表lCREATE VIEW:创建视图8.4 权限管理权限管理l权限管理包含以下三方面的内容:l授予权限 l拒绝权限 l取消权限 l管理权限的方法有两种:一是使用T-SQL语句,二是通过企业管理器。8.4 权限管理权限管理l(1)授予权限l授予对象权限的语法格式如下:lGRANTlALL PRIVILEGES|permission,.nll (column,.n)ON table|viewl|ON table|view(c
25、olumn,.n)l|ON stored_procedure llTO security_account,.nlWITH GRANT OPTION8.4 权限管理权限管理l授予命令权限l语法格式:lGRANT ALL statement,.nlTO security_account,.n8.4 权限管理权限管理l例8.18 将“students”数据库的“stu”表中查询数据的权限授予了public角色,将在“stu”表中执行INSERT操作的权限授予了yq。lUSE studentslGOlGRANT SELECT ON stu TO publiclGOlGRANT INSERT ON st
26、uTo yq8.4 权限管理权限管理l(2)撤销权限l撤销语句权限。l语法格式:lREVOKE ALL|statement ,.n lFROM security_account ,.n 8.4 权限管理权限管理l撤销对象权限。l语法格式:l REVOKElALL|permission,.nll|ON table|view(column,.n)l|ON stored_procedure llTO|FROM l security_account,.n8.4 权限管理权限管理l例8.19 将从登录帐户yq和cdnyjs组撤消创建表和视图的权利。lUSE studentslGOlREVOKE CREA
27、TE VIEW,CREATE TABLElFROM yq,cdnyjslGO8.4 权限管理权限管理l(3)拒绝访问l拒绝对象权限。l语法格式:lDENYlALL|permission,.nll|ON table|view(column,.n)l|ON stored_procedure llTO security_account,.n8.4 权限管理权限管理l拒绝命令权限。l语法格式:lDENY ALL statement,.nlTO security_account,.n8.4 权限管理权限管理l例8.20 首先将在“students”数据库“stu”表中执行SELECT操作的权限授予pub
28、lic角色,这样所有数据库用户都拥有了该项权限。然后,又拒绝yq拥有该项权限。lUSE studentslGOlGRANT SELECT ON stu TO publiclGOlDENY SELECT,INSERT,UPDATE,DELETE ON stu TO yqlGO总结总结l登录帐户通过映射成为数据库用户,从而实现对数据库的访问。l在服务器级别上可使用固定服务器角色来实现登录帐户权限的管理。l在数据库级别上可使用固定服务器角色实现数据库用户权限的管理。l权限用来控制数据库用户如何访问数据库对象。权限分为对象权限、语句权限和隐含权限。l一个用户或角色的权限可以有三种存在形式:授权、拒绝、剥夺。