《数据库的安全性.ppt》由会员分享,可在线阅读,更多相关《数据库的安全性.ppt(123页珍藏版)》请在三一办公上搜索。
1、第12章 数据库的安全性,12.1 SQL Server 安全性概述12.2 登录帐户管理12.3 服务器角色管理12.4 数据库角色管理12.5 数据库帐户管理12.6 权限管理习题,12.1 SQL Server 安全性概述,基本概念数据库安全指保护数据库以防止不合法的使用所造成的数据泄密、更改、或破坏。三种安全模型:自主访问控制(DAC)、强制访问控制(MAC)、基于角色的访问控制(RBAC)模型。,12.1 SQL Server 安全性概述,12.1.1 数据库的安全性考虑1从使用方式的角度来看SQL Server 2005的安全性分为两类:数据库安全性和应用程序安全性。数据库安全性以
2、信息资源和信息资源的用户为主要管理对象。一个用户只要具有对某个对象的访问权限,则无论使用什么工具,都可以对该对象进行访问。,应用程序安全性则可以指定一个数据库或其中的某个对象只能由某些特殊的应用程序访问。2从登录的角度来看在SQL Server系统中,安全性采用的是两级权限管理机制。第一级是服务器级的“连接权”。第二级是数据库级的“访问权”。由于绝大多数数据库管理系统都还是运行在某一特定操作系统平台下的应用程序,SQL Server也不例外,而数据库中又包含有很多对象,因而实际上,SQL Server的安全性机制可以划分为4个等级:,(1)客户机操作系统的安全性;(2)SQL Server的登
3、录安全性;(3)数据库的使用安全性;(4)数据库对象的使用安全性。每个安全等级就好像一道门,如果门没有上锁,或者用户拥有开门的钥匙,则用户可以通过这道门达到下一个安全等级。如果通过了所有的门,则用户就可以实现对数据的访问了。,12.1.2 帐户验证 既然SQL Server的安全性机制可以划分为四个等级,因而使用数据库中数据的帐户也应从四个方面进行验证。1操作系统级别的验证在用户使用客户计算机通过网络实现对SQL Server服务器的访问时,用户首先要获得客户计算机操作系统的使用权。一般来说,在能够实现网络互联的前提下,用户没有必要直接在运行SQL Server服务器的主机上进行登录,除非SQ
4、L Server服务器就运行在本地计算机上。,保证操作系统安全性是操作系统管理员或者网络管理员的任务。由于SQL Server采用了与Windows集成的网络安全机制,因此使得操作系统的安全性也显得尤为重要,同时也加大了管理数据库系统安全性和灵活性的难度。2服务器级别的验证SQL Server的服务器级安全性建立在控制服务器登录帐户和密码的基础上。SQL Server采用了标准SQL Server登录和集成Windows登录两种方式。无论是使用哪种登录,用户在登录时提供的登录帐户和密码决定了用户能否获得SQL Server的访问权,以及在获得访问权以后,用户在访问SQL Server进程时可以
5、拥有的权利。管理和设计合理的登录帐户是SQL Server 系统管理员的重要任务。,3数据库级别的验证在用户通过SQL Server服务器的安全性检验以后,将直接面对不同的数据库入口。这是用户将接受的第三次安全性检验。默认情况下,数据库的所有者可以访问该数据库的对象,还可以分配访问权给别的用户,以便让别的用户也拥有针对该数据库的访问权利。4数据库对象级别的验证数据库对象的安全性是核查用户权限的最后一个安全等级。在创建数据库对象的时候,SQL Server将自动把该数据库对象的拥有权赋予该对象的创建者。对象的所有者可以实现该对象的完全控制。,默认情况下,只有数据库的所有者可以在该数据库下进行操作
6、。当一个非数据库所有者想访问数据库里的对象时,必须事先由数据库的所有者赋予该用户对指定对象的执行特定操作的权限。例如,一个用户想访问“学生图书借阅管理”数据库里“图书信息”表中的信息,则他必须在首先成为数据库合法用户的前提下,获得由“学生图书借阅管理”数据库所有者分配的针对“图书信息”表的访问权限。,12.2 登录帐户管理,12.2.1 标准的SQL帐户管理1帐户的建立如果要采用SQL Server提供的标准登录模式实现SQL Server服务器的登录连接,用户必须拥有合法的帐户和密码。用户建立标准登录帐户的方式有三种:使用查询分析器,通过系统提供的存储过程;通过SQL Server企业管理器
7、;使用SQL Server提供的创建登录向导。,1)使用系统提供的存储过程sp_addlogin建立标准登录帐户(1)基本语法如下:sp_addloginloginame=login,passwd=password,=defabdatabase,deflanguage=language(2)参数解释如下:loginame 登录帐户名。在同一个服务器上用户的帐户名必须惟一。passwd 帐户的密码。,defab 新建立帐户的默认数据库。如果不设置此参数,则默认值为master数据库。deflanguage 默认的语言。注意:SQL Server的登录帐户名必须符合SQL Server的命名规则。
8、下面的例子创建了一个登录帐户。EXEC sp_addlogin ssq,518405,masterGO这个例子创建了一个名叫“ssq”,密码是“518405”,默认数据库为“master”的帐户。注意:对于一个没有授予任何权限的新建帐户,默认数据库只能选择“master”。,2)通过SQL Server企业管理器建立标准登录帐户用企业管理器创建标准登录帐户的步骤如下:(1)展开要创建登录帐户的“服务器”节点。(2)选中树型结构上的“安全性”节点,展开该节点,如图8-1所示。(3)在“登录”节点上右击,弹出的快捷菜单如图8-2所示。,图8-1 树型结构上的“安全性”节点,图8-2 快捷菜单,(4
9、)在图8-2中单击“新建登录”命令,出现如图8-3所示的界面。图8-3 新建登录窗口,(5)在界面上输入有关的登录帐户的相关信息,如帐户名、默认的数据库、默认的语言等。在身份验证中,选中SQL Server身份验证。图8-4 创建登录帐户,(6)打开“服务器角色”选项卡,为新建的帐户指定服务器级的权限,如图8-5所示。图8-5 分配固定服务器角色,(7)打开“数据库访问”选项卡为新建的帐户指定数据库访问权限,如图8-6所示。用户可以在这个界面上决定允许该登录帐户访问的数据库,以及分配给登录帐户的数据库角色。图8-6 分配帐户可以访问的数据库,(8)最后,单击“确定”命令按钮,完成新帐户的建立。
10、3)使用SQL Server提供的创建登录向导建立标准登录帐户使用向导建立标准登录帐户的步骤如下:(1)从企业管理器的控制台根目录中的“工具”菜单中选择“向导”命令,如图8-7所示。,图8-7 选择“向导”选项,(2)在打开的对话框中,展开“数据库”节点,选中“创建登录向导”选项,如图8-8所示。图8-8 选择向导,(3)单击“确定”命令按钮,出现欢迎使用创建登录向导界面,其中简介了它所能替您完成的任务,请直接用鼠标左键单击“下一步”按钮,出现如图8-9所示的对话框。图8-9 选择身份验证模式对话框,(4)在身份验证模式对话框中,选中SQL Server身份验证模式,单击“下一步”按钮,出现如
11、图8-10所示的对话框。图8-10 SQL Server身份验证模式,(5)在图8-10所示的对话框中,输入登录帐户“陈一铭”和密码“518405”,单击“下一步”按钮,出现如图8-11所示的对话框。图8-11 选择安全性角色,(6)在图8-11所示的对话框中,为新建登录选择服务器角色。单击“下一步”按钮,出现如图8-12所示的对话框。图8-12 选择可以访问的数据库,(7)在图8-12所示的对话框中,为新建登录选择允许访问的数据库。单击“下一步”按钮,出现如图8-13所示的对话框。图8-13 完成创建向导,(8)在图8-13所示的对话框中,列出了您所做的所有设置情况。如果满意,单击完成,系统
12、将按照您的设置建立一个新的帐户。2修改和删除帐户建立好的帐户信息还可以进行修改和删除。1)使用系统存储过程sp_defaultdb修改登录帐户的默认数据库(1)基本语法如下:sp_defaultdb loginame=login,defdb=database,(2)参数解释如下:loginame=login 登录名。defdb=database 新的默认数据库的名称。例如:EXEC sp_defaultdb ssq,pubs2)使用系统存储过程sp_defaultlanguage修改登录帐户的默认语言(1)基本语法如下:sp_defaultlanguage loginame=login,lan
13、guage=language,(2)参数解释如下:loginame=login 登录名。language=language 登录的默认语言。例如:EXEC sp_defaultlanguage,ssq,english3)使用系统存储过程sp_password修改登录帐户的密码(1)基本语法如下:sp_password old=old_password,new=new_password,loginame=login,(2)参数解释如下:old=old_password 旧密码。其默认值为 NULL。new=new_password 新密码。loginame=login 受密码更改影响的登录名。例
14、如:EXEC sp_password 518405,208107,ssq4)使用系统存储过程sp_droplogin删除SQL Server标准登录帐户(1)基本语法如下:sp_droplogin loginame=login(2)参数解释如下:loginame=login 将被删除的登录。,例如:EXEC sp_droplogin,ssq使用企业管理器也可以实现对标准帐户的修改和删除。由于是简单的可视化操作,具体操作方法在此就不介绍了。注意:(1)在SQL Server中删除帐户信息时,有如下限制:已经映射到数据库用户的帐户不允许被删除;系统帐户sa不能被删除,正在使用的帐户不能被删除;拥有
15、数据库的帐户不能被删除。,(2)在进行修改和删除操作时用到的所有存储过程和使用企业管理器进行的有关帐户、密码、角色、权限的操作,都只有被赋予sysadmin或securityadmin固定服务器角色的用户才可以使用。12.2.2 与Windows集成的帐户管理1帐户的建立所谓与Windows集成的登录帐户,实际上是将Windows的用户和工作组映射为SQL Server的登录帐户。对于已经映射的Windows帐户,SQL Server可以对这些帐户采取信任登录的方式。如果这些Windows的用户或工作组成员能够成功地登录Windows,则SQL Server就承认他们是合法的用户,从而允许他们
16、连接上服务器。与Windows集成的登录模式实际上是让Windows代替SQL Server执行登录审查任务。,用户建立与Windows集成的登录帐户方式有三种:使用查询分析器,通过系统提供的存储过程;通过SQL Server企业管理器;使用SQL Server提供的创建登录向导。因为后两种与建立标准登录模式帐户相似,所以在这里只介绍第一种方式。使用系统存储过程sp_grantlogin来使Windows的用户或工作组映射成为SQL Server的登录帐户。(1)基本语法如下:sp_grantlogin loginame=login(2)参数解释如下:loginame=login 要添加的 W
17、indows用户或组的名称。,例如:sp_grantlogin lgdjsjx这个例子将Windows服务器上lgd域下的工作组jsjx映射成为了SQL Server的登录帐户。注意:映射工作组或用户的前提条件是该工作组或用户必须存在于Windows服务器上。当用户将工作组设置为SQL Server的帐户后,所有工作组的成员都可以使用这个帐户实现针对SQL Server的连接。所有工作组的成员都将享有该帐户的所有权限。在给出工作组或用户名时,必须指定用户或工作组所在的域,并使用定界符将域和用户括起来。,2删除Windows帐户 使用系统存储过程sp_revokelogin可以从SQL Serv
18、er中删除用sp_grantlogin创建的Windows用户或组的登录项。(1)基本语法如下:sp_revokelogin loginame=login(2)参数解释如下:loginame=login Windows 用户或组的名称。注意:只有sysadmin或securityadmin固定服务器角色的成员才能执行 sp_revokelogin。删除SQL Server标准用户帐户和删除Windows帐户应使用不同的系统存储过程。,例如:EXEC sp_revokelogin lgdssq 使用企业管理器也可以实现对Windows帐户的删除。由于是简单的可视化操作,具体操作方法在此就不介绍了
19、。3拒绝登录帐户使用系统存储过程sp_denylogin可以设置不允许Windows的工作组或用户连接SQL Server服务器。(1)基本语法如下:sp_denylogin loginame=login,(2)参数解释如下:loginame=login Windows用户或组的名称。例如:EXEC sp_denylogin lgdjsjx注意:只能拒绝Windows帐户登录,而不能拒绝SQL Server的标准帐户登录。如果一个Windows的用户名叫lgdssq,同时也是lgdjsjx的成员;如果使用了EXEC sp_revokelogin lgdssq,但lgdjsjx与SQL Serv
20、er帐户的映射关系依然存在而且可以连接,则lgdssq依然可以连接上SQL Server服务器。,然而,如果使用了EXEC sp_denylogin lgdssq,虽然lgdjsjx与SQL Server帐户的映射关系依然存在而且可以连接,但是lgdssq用户将无法再连接上SQL Server服务器。使用企业管理器也可以拒绝已授权Windows帐户的访问。由于是简单的可视化操作,具体操作方法在此就不介绍了。,12.3 服务器角色管理,12.3.1 固定服务器角色1固定服务器角色服务器角色是一些系统定义好操作权限的用户组,其中的成员是登录帐户。服务器角色不能增加或删除,只能对其中的成员进行修改。
21、服务器角色是SQL Server在安装时就创建好的用于分配服务器级管理权限的实体。,常用的固定服务器角色有:sysadmin、serveradmin、securityadmin、dbcreator、diskadmin、processadmin、setupadmin和bulkadmin。2浏览服务器角色有两种方法可以浏览服务器角色:1)使用系统存储过程sp_helpsrvrole浏览服务器角色(1)基本语法如下:sp_helpsrvrole srvrolename=role,(2)参数解释如下:srvrolename=role 固定服务器角色的名称。例如:EXEC sp_helpsrvrole2
22、)使用企业管理器浏览服务器角色展开企业管理器“服务器名/安全性/服务器角色”也可以看到所有的服务器角色,以及它们的描述,如图8-14所示。,图8-14 服务器角色列表,12.3.2 管理服务器角色成员一个登录帐户可以不属于任何角色,也可以同时属于多个角色。将一个登录帐户加入一个角色,可以令使用该帐户登录的用户自动地具有角色预定义的权限。Windows系统管理员组(即BUILTINadministrators)自动属于sysadmin角色。更改一个角色的成员可以使用系统存储过程或使用企业管理器。1使用系统存储过程更改服务器角色成员(1)将一个帐户加入一个服务器角色,可使用系统存储过程sp_add
23、srvrolemember。,系统存储过程sp_addsrvrolemember的功能是将某固定服务器角色分配给某指定的登录帐户,这时该用户被授予服务器角色所拥有的权力。基本语法如下:sp_addsrvrolemember loginame=login rolename=role 参数解释如下:loginame=login 添加到固定服务器角色的登录帐户名称。rolename=role 要将登录帐户添加到的固定服务器角色的名称。,例如:EXEC sp_addsrvrolemember lgdjsjx,sysadmin这个例子将固定服务器角色sysadmin分配给了登录帐户lgdjsjx,从此l
24、gdjsjx就拥有了角色sysadmin所拥有的所有权限。(2)将某个帐户从服务器角色中删除,可使用系统存储过程sp_dropsrvrolemember。系统存储过程sp_dropsrvrolemember的功能是收回分配给某登录帐户的指定固定服务器角色。基本语法如下:sp_dropsrvrolemember loginame=login,rolename=role,参数解释如下:loginame=login 将要从固定服务器角色删除的登录的名称。rolename=role 服务器角色的名称。例如:EXEC sp_dropsrvrolemember lgdjsjx,sysadmin这个例子回收
25、了分配给登录帐户lgdjsjx的固定服务器角色sysadmin。,2使用企业管理器更改服务器角色成员(1)从角色管理的角度更改服务器角色的成员需要以下步骤:在企业管理器中展开服务器组,再展开服务器:展开“安全性”节点,选中“服务器角色”目录。右边的窗口中列出了服务器中的所有角色,如图8-14所示。在列表中双击要修改成员的角色(比如,sysadmin),打开如图8-15所示的角色属性对话框。,图8-15 角色属性对话框,角色属性对话框中列出了角色现在包括的成员。sysadmin当前的成员只有“sa”。单击图8-15中的“添加”按钮,可以打开选择成员的对话框,从中选择要增加到角色中的服务器登录帐户
26、。图8-16中选择将“陈一铭”增加到sysadmin角色中。,图8-16 添加成员对话框,单击“确定”按钮,确认修改。(2)从登录帐户的角度改变帐户所属的角色的步骤如下:在企业管理器中展开服务器组,再展开服务器。展开“安全性”节点,选中“登录”目录。在右边窗口的帐户列表中,用鼠标右键单击要改变所属角色的帐户,并在弹出的快捷菜单中选择“属性”命令,打开如图8-17所示的帐户属性对话框。,图8-17 帐户属性对话框,在图8-17所示的对话框中单击“服务器角色”选项卡,如图8-18所示。在图8-18的“服务器角色”列表中选中或取消选中即可以将帐户加入服务器角色或从服务器角色中删除。单击“确定”按钮,
27、确认修改。,图8-18“服务器角色”选项卡,12.3.3 服务器角色的权限1固定服务器角色的权限(1)sysadmin拥有最高的权限,可以执行服务器范围内的一切操作。(2)Securityadmin可以在服务器范围内进行有关权限的一切管理操作。如管理登录帐户,管理数据库对象权限,阅读日志文件等。(3)serveradmin可以设置服务器范围的配置选项,关闭服务器。(4)Dbcreator可以创建、更改和除去数据库。,(5)setupadmin可以管理链接服务器和启动过程。(6)processadmin可以管理在 SQL Server 中运行的进程。(7)diskadmin可以管理磁盘文件。(8
28、)bulkadmin可以执行 BULK INSERT 语句。2使用系统存储过程sp_srvrolepermission浏览固定服务器角色的权限(1)基本语法如下:sp_srvrolepermission srvrolename=role,(2)参数解释如下:srvrolename=role 为其返回权限的固定服务器角色名。如果未指定,则返回所有固定服务器角色的权限。例如:下例显示与 sysadmin 固定服务器角色关联的权限。EXEC sp_srvrolepermission sysadmin 下例显示所有固定服务器角色的权限。EXEC sp_srvrolepermission,*12.4 数
29、据库角色管理,12.4.1 固定数据库角色固定数据库角色是在每个数据库中都存在的预定义组。管理员可以将一个用户加入一个或多个数据库角色中。固定数据库角色不能被添加、修改或删除。SQL Server在数据库级设置了固定数据库角色来提供最基本的数据库权限的综合管理。,1固定数据库角色1)使用系统存储过程sp_helpdbfixedrole浏览固定数据库角色(1)基本语法如下:sp_helpdbfixedrole rolename=role(2)参数解释如下:rolename=role 固定数据库角色的名称。如果指定了 role,则返回有关该角色的信息;反之,将返回所有固定数据库角色的列表和描述。,
30、例如:(1)EXEC sp_helpdbfixedrole sysadmin(2)EXEC sp_helpdbfixedrole2)使用企业管理器浏览固定数据库角色具体操作步骤如下:(1)展开指定的服务器节点。(2)展开该服务器节点下面的“数据库”的子节点。(3)选中“角色”节点,窗口的右边会显示数据库中已存在的角色。在未创建角色之前,数据库中只有固定数据库角色,如图8-19所示。,图8-19 固定数据库角色列表,3)固定数据库角色的权限public:维持所有的默认权限。db_owner:可以执行所有数据库角色的活动。db_accessadmin:可以加入或删除数据库用户、组和角色。db_dd
31、ladmin:可以加入、修改或删除数据库对象。db_securityadmin:管理角色、角色成员,管理对象和语句权限。db_backupoperator:备份数据库。db_datareader:可以从所有表中读数据。,db_datawriter:可以在所有表中增加、修改或删除数据。db_denydatareader:看不到数据库任何数据。db_denydatawriter:不能改变任何表的数据。默认情况下,每个新添加的用户都是public数据库角色的成员。,2管理固定数据库角色成员1)使用系统存储过程sp_addrolemember将某个登录帐户加入某个固定数据库角色。(1)基本语法如下:s
32、p_addrolemember rolename=role,membername=security_account(2)参数解释如下:rolename=role 当前数据库中 SQL Server 角色的名称。membername=security_account 添加到角色的安全帐户。,例如:USE 学生图书借阅管理GOEXEC sp_addrolemember db_owner,chenmiaoGO这个例子使登录帐户也具有了数据库所有者的权限。2)使用系统存储过程sp_droprolemember从某个固定数据库角色中删除指定的登录帐户。(1)基本语法如下:sp_droprolemembe
33、r rolename=role,membername=security_account,(2)参数解释如下:rdename=role 某个角色的名称。membername=security_account 正在从角色中删除的安全帐户的名称。例如:USE 学生图书借阅管理GOEXEC sp_droprolemember db_owner,chenmiaoGO注意:由于sp_droprolemember和sp_addrolemember系统存储过程只能对本数据库的用户进行控制。因此在执行上述操作之前,必须保证指定的登录帐户已经映射为该数据库的用户。,3角色的应用1)public角色在前面提到的数据
34、库角色中,SQL Server还有一个特殊的数据库角色public。所有的数据库用户都属于public角色。public角色的特点是:替数据库用户捕获所有的数据库默认权限。不能将public角色分配给任何用户、工作组,因为所有用户都默认为属于该角色。public角色存在于每一个数据库中,包括系统数据库和用户建立的数据库。public角色不允许被删除。,2)sysadmin角色与dbo在所有数据库用户中,特殊用户dbo具有最高的管理权限。它被认为是所有数据库对象的所有者,可以访问所有的数据库对象,可以在数据库范围内执行一切操作。在固定数据库级角色和dbo之间有着一种奇特的对应关系。任何被赋予sy
35、sadmin固定服务器角色的用户都映射着每个数据库的特殊用户dbo。所有由sysadmin成员创建的数据库对象都自动将所有者设置为dbo。,例如,如果用户chenmiao是一个sysadmin固定服务器角色成员,而且在“学生图书借阅管理”数据库里创建了一个表名叫T1,则表T1属于“学生图书借阅管理”数据库的dbo用户,应该表示为dbo.T1,而不是chenmiao.T1。相反,如果chenmiao不是数据库所有者或者sysadmin固定服务器中的成员,那么由chenmiao创建的表T1属于chenmiao,应该表示为chenmiao.T1。注意:只有由数据库所有者和sysadmin固定服务器成
36、员创建的数据库对象才属于dbo。由任何其他用户(包括db_owner固定数据库角色)创建的对象只属于创建对象的用户,而不属于dbo。,8.4.2 用户定义数据库角色很多时候,固定的数据库角色并不能满足需要。用户的需求并不总是能够映射到一个固定的数据库角色,或者有时数据库管理员要给一些用户设置相同的权限,但他没有管理Windows用户和组的权限,不能将这些用户组织在一个Windows组中。这时可以通过自定义数据库角色统一管理这些用户的权限。1用户定义数据库角色的创建创建用户定义数据库角色的方法有两种:一是使用系统存储过程;二是通过企业管理器。,1)使用系统存储过程sp_addrole创建数据库角
37、色(1)基本语法如下:sp_addrole rolename=role,ownername=owner(2)参数解释如下:rolename=rolename 数据库角色的名字。ownername=ownername 该角色所有者的名字,默认为dbo。owner必须是当前数据库里的用户或角色。例如:下面的例子创建了一个名叫“rjz”的数据库角色。USE 学生图书借阅管理GOEXEC sp_addrole rjzGO,2)通过企业管理器创建数据库角色使用企业管理器创建数据库角色的步骤如下:(1)展开指定的“服务器”节点;(2)展开“数据库”节点;(3)展开指定的“数据库”子节点;(4)选中“角色”
38、节点,用鼠标右键单击该节点,从弹出快捷菜单中选择“新建数据库角色”命令,则系统弹出如图8-20所示的对话框。,图8-20 数据库角色属性对话框,(5)用户可以输入数据库角色名字,也可以单击“添加”按钮添加数据库用户,还可以将用户自己建立的数据库角色添加到列表中。这样,新建的数据库角色就继承了原有数据库角色的所有权限。(6)用户也可以选择将该角色设置为“应用程序角色”,“应用程序角色”要求用户输入密码。(7)单击“确定”按钮完成数据库角色的创建。,2用户定义数据库角色的删除1)使用系统存储过程sp_droprole删除指定的数据库角色(1)基本语法如下:sp_droprole rolename=
39、role(2)参数解释如下:rolename=role 将要从当前数据库中删除的角色的名称。例如:USE 学生图书借阅管理GOEXEC sp_droprole rjzGO这个例子删除了刚才建立的数据库角色。,*12.5 数据库帐户管理,12.5.1 内置用户帐户SQL Server的数据库级别上存在着两个特殊的数据库用户。这两个用户分别是dbo和guest。dbo是数据库的所有者,在安装SQL Server时,被设置到model数据库中,而且不能被删除,dbo在每个数据库中都存在。dbo是数据库的最高权利所有者,可以在数据库范围内执行一切操作。dbo永远无法从数据库中删除,并且它的用户ID(U
40、ID)总是为1。dbo用户对应于创建数据库的登录帐户,所有系统数据库dbo都对应于sa帐户。,guest用户可以使任何已经登录到SQL Server的用户都可以访问数据库。所有的系统数据库除model以外都有guest用户。guest用户的存在意味着所有登录到SQL Server服务器的用户都可以访问数据库,即使他还没有成为本数据库的用户。guest用户可像其他用户一样操作。对guest用户应小心使用,如果使用不当有可能成为安全的隐患。8.5.2 添加和管理用户帐户1添加数据库用户将登录帐户添加为数据库用户后,使用该登录帐户登录的SQL Server用户就可以实现对数据库的访问了。,添加数据库
41、用户的方法有两种:一是使用系统存储过程;二是通过企业管理器。1)使用系统存储过程sp_grantdbaccess添加数据库用户(1)基本语法如下:sp_grantdbaccess loginame=login,name_in_db=name_in_db(2)参数解释如下:loginame=login 当前数据库中新安全帐户的登录名称。name_in_db=name_in_db 数据库中帐户的名称。,(3)说明:所有有关数据库级权限的设置修改等操作,包括系统存储过程的调用和使用企业管理器进行的操作,都只有被分配了db_accessadmin或db_owner固定服务器角色的用户可以执行。例如:下
42、面的例子为“学生图书借阅管理”数据库添加了guest用户。USE 学生图书借阅管理EXEC sp_grantdbaccess guestGO,下面的例子建立了一个SQL Server标准登录帐户,然后将该帐户添加为“学生图书借阅管理”数据库的用户。EXEC sp_addlogin miaomiao,mm,pubsGOUSE 学生图书借阅管理GOEXEC sp_grantdbaccess miaomiaoGO,2)使用企业管理器创建数据库用户使用企业管理器创建数据库用户的步骤如下:(1)展开要创建用户的数据库所在的服务器节点;(2)展开该服务器节点下面的“数据库”节点;(3)展开指定的“数据库”
43、的子节点;(4)在“用户”节点上右击,从弹出的快捷菜单中选择“新建数据库用户”命令,系统弹出如图8-21所示的对话框;(5)从“登录名”下拉列表中选择要映射的登录帐户,然后输入对应的数据库用户名,再选择分配给该用户的角色;(6)单击“确定”按钮完成新用户的添加。,图8-21 数据库用户属性对话框,2删除数据库用户 1)使用系统存储过程sp_revokedbaccess删除数据库用户。(1)基本语法如下:sp_revokedbaccess name_in_db=name(2)参数解释如下:name_in_db=name 要删除的帐户名。例如:下面的例子是断开帐户miaomiao与“学生图书借阅管
44、理”数据库之间的对应关系。USE 学生图书借阅管理GOEXEC sp_ revokedbaccess miaomiaoGO,2)使用企业管理器删除数据库用户若要在企业管理器里删除某数据库用户,请选择指定的数据库用户并右击,再从快捷菜单中选择“删除”命令即可。,12.6 权限管理,12.6.1 权限的种类SQL Server 2000 中的权限分为三种:对象权限、语句权限和隐含权限。1对象权限当数据库对象刚刚创建完后,只有所有者可以访问该数据库对象。任何其他用户想访问该对象必须首先获得所有者赋予他们的权限。所有者可以授予权限给指定的数据库用户。这种权限被称为对象权限(Object Permiss
45、ion)。,概括地说,对象权限是指用户对数据库中的表、存储过程、视图等对象的操作权限。例如,是否可以查询数据库表中数据,是否可以执行存储过程等。具体包括:(1)对表和视图,所有者可以授予其他用户INSERT、UPDATE、DELETE、SELECT和DRI权限。或者使用ALL permissions代替前面五种权限。(2)对表和视图的列,所有者可以授予SELECT、UPDATE权限。(3)对存储过程,所有者可以授予EXECUTE权限。,说明:在数据库用户要对表执行相应的操作之前,必须事先获得相应的操作权限。DRI权限允许别的表的所有者引用本表的列作为外键约束。存储过程的所有者可以授予EXECU
46、TE权限给别的数据库用户。具有sysadmin固定服务器角色的用户,还有数据库对象的所有者,默认拥有对数据库对象进行所有操作的权限。,2语句权限数据库所有者还可以授予执行某些T-SQL命令的权限,这种权限在SQL Server中被称为语句权限(Statement Permission)。这些命令只有特定的用户dbo可以使用。如果dbo希望别的用户也可以创建表和视图,必须首先授予执行这些命令的权限给那些用户。概括地说,语句权限是指是否可以执行一些数据定义语句。具体包括:CREATE DATABASE:创建一个新数据库及存储该数据库的文件。BACKUP DATABASE:备份整个数据库。,BACK
47、UP LOG:备份事务日志。CREATE DEFAULT:创建称为默认值的对象。CREATE FUNCTION:创建用户定义函数。CREATE PROCEDURE:创建存储过程。CREATE RULE:创建规则。CREATE TABLE:创建表。CREATE VIEW:创建视图。3隐含权限隐含权限是指系统预定义的服务器角色或数据库角色,或数据库所有者和数据库对象所有者所拥有的权限。隐含权限不能明确地赋予和撤销。,12.6.2 权限的管理一个用户或角色的权限可以有以下三种存在形式:授权、拒绝、剥夺。管理权限的方法有两种:一是使用T-SQL语句;二是通过企业管理器。1使用T-SQL语句实现对权限的
48、管理1)授予权限(1)授予对象权限。基本语法如下:,GRANTALL PRIVILEGES|permission,.n(column,.n)ON table|view|ON table|view(column,.n)|ON stored_procedure TO security_account,.nWITH GRANT OPTION,参数解释如下:ALL 表示授予所有可以应用的权限。在授予对象权限时,固定服务器角色sysadmin、固定数据库角色db_owner成员和数据库对象所有者可以使用ALL关键字。permission 表示在对象上执行某些操作的权限。column 在表或视图上允许用户
49、将权限局限到某些列上,column表示列的名字。WITH GRANT OPTION 定义是否给用户以授予该权限给别的用户的权利。,security_account 定义被授予权限的用户单位。security_account可以是SQL Server的数据库用户,可以是SQL Server的角色,也可以是Windows的用户或工作组。说明:权限只能授予本数据库的用户,或者获准访问本数据库的别的数据库的用户。如果将权限授予了public角色,则所有数据库里的所有用户都默认为获得了该项权限。如果将权限授予了guest角色,则所有可连接上服务器的用户都默认获得了该项权限。,(2)授予命令权限。基本语法
50、如下:GRANT ALL statement,.nTO security_account,.n参数解释如下:ALL 表示授予所有可以应用的权限。在授予命令权限时,只有固定服务器角色sysadmin成员可以使用ALL关键字。statement 表示可以授予权限的命令。security_account 定义被授予权限的用户单位。security_account可以是SQL Server的数据库用户,可以是SQL Server的角色,也可以是Windows的用户或工作组。,说明:CREATE DATABSE权限一般不授予给用户,它只为服务器管理员保留。权限只能授予本数据库的用户,或者获准访问本数据库