第 10章 SQL SERVER权限管理
10.1 SQL Server权限管理策略
对于一个数据库管理员来说,安全性就意味着必须保证那些具有特殊数据访问权限的用户能够登录到 SQL
Server,并且能够访问数据以及对数据库对象实施各种权限范围内的操作;同时,他还要防止所有的非授权用户的非法操作。
SQL Server提供了既有效又容易的安全管理模式,这种安全管理模式是建立在安全身份验证和访问许可两者机制上的。
10.1.1 安全身份验证
安全身份验证用来确认登录 SQL Server的用户的登录帐号和密码的正确性,由此来验证该用户是否具有连接 SQL Server的权限。任何用户在使用 SQL Server数据库之前,必须经过系统的安全身份验证。
SQL Server 2005提供了两种确认用户对数据库引擎服务的验证模式:
( 1) Windows身份验证
( 2) SQL Server身份验证。
10.1.1 安全身份验证
( 1) SQL Server数据库系统通常运行在 Windows服务器上,而
Windows作为网络操作系统,本身就具备管理登录、验证用户合法性的能力,因此 Windows验证模式正是利用了这一用户安全性和帐号管理的机制,允许 SQL Server可以使用 Windows的用户名和口令。在这种模式下,用户只需要通过 Windows的验证,就可以连接到 SQL Server,而
SQL Server本身也就不需要管理一套登录数据。
( 2) SQL Server身份验证模式允许用户使用 SQL Server安全性连接到
SQL Server。在该认证模式下,用户在连接 SQL Server时必须提供登录名和登录密码,这些登录信息存储在系统表 syslogins中,与 Windows
的登录帐号无关。 SQL Server自身执行认证处理,如果输入的登录信息与系统表 syslogins中的某条记录相匹配,则表明登录成功。
10.1.1 安全身份验证利用 SQL Server管理平台可以进行认证模式的设置,步骤如下:
( 1)打开 Server管理平台,右击要设置认证模式的服务器,从弹出的快捷菜单中选择“属性”选项,则出现 SQL Server属性对话框。
( 2)在 SQL Server属性对话框中选择“安全性”选项页,如图 10-1所示。
( 3)在“服务器身份验证”选项栏中,可以选择要设置的认证模式,
同时在“登录审核”中还可以选择跟踪记录用户登录时的哪种信息,
例如登录成功或登录失败的信息等。
( 4)在“服务器代理帐户”选项栏中设置当启动并运行 SQL Server时,
默认的登录者中哪一位用户。
图 10-1 SQL Server服务器属性页框
10.1.2 访问许可确认通过了认证并不代表用户就能访问 SQL Server
中的数据,同时他还必须通过许可确认。用户只有在具有访问数据库的权限之后,才能够对服务器上的数据库进行权限许可下的各种操作,
这种用户访问数据库权限的设置是通过用户帐号来实现的 。
10.2 用户权限管理
10.2.1 服务器登录帐号和用户帐号管理
10.2.2 许可(权限)管理
10.2.3 角色管理
10.2.1服务器登录帐号和用户帐号管理
1.SQL Server服务器登录管理
利用 SQL Server管理平台可以创建、管理 SQL Server登录帐号。
其具体执行步骤如下:
( 1)打开 SQL Server管理平台,
单击需要登录的服务器左边的,+”
号,然后展开安全性文件夹。
( 2)右击登录名( login)图标,
从弹出的快捷菜单中选择“新建登录名”选项,则出现 SQL
Server“登录名 —新建”对话框,
如图 10-2所示。 图 10-2 新建登录名对话框
10.2.1服务器登录帐号和用户帐号管理
1.SQL Server服务器登录管理
( 3)在“名称”文本框中输入登录名,在身份验证选项栏中选择新建的用户帐号是 Windows 认证模式,
或是 SQL Server认证模式。
( 4)选择“服务器角色”页框,如图 10-3所示。在服务器角色列表框中,列出了系统的固定服务器角色。
在这些固定服务器角色的左端有相应的复选框,打勾的复选框表示该登录帐号是相应的服务器角色成员。
图 10-3 服务器角色对话框
10.2.1服务器登录帐号和用户帐号管理
1.SQL Server服务器登录管理
( 5)选择“用户映射”页框,如图
10-4所示。上面的列表框列出了
“映射到此登录名的用户”,单击左边的复选框设定该登录账号可以访问的数据库以及该帐号在各个数据库中对应的用户名。下面的列表框列出了相应的“数据库角色成员身份”清单,从中可以指定该帐号所属的数据库角色。
图 10-4 用户映射对话框
10.2.1服务器登录帐号和用户帐号管理
1.SQL Server服务器登录管理
( 6)选择“安全对象”页框,
如图 10-5所示。安全对象是
SQL Server数据库引擎授权系统控制对其进行访问的资源。点击“添加 …” 按钮,可对不同类型的安全对象进行安全授予或拒绝。
( 7)设置完成后,单击“确定”按钮即可完成登录帐号的创建。
图 10-5 安全对象对话框
10.2.1服务器登录帐号和用户帐号管理
2,用户帐号管理
在一个数据库中,用户帐号惟一标识一个用户,
用户对数据库的访问权限以及对数据库对象的所有关系都是通过用户帐号来控制的。
利用 SQL Server管理平台可以授予 SQL
Server登录访问数据库的许可权限。
10.2.1服务器登录帐号和用户帐号管理
2,用户帐号管理
利用 SQL Server管理平台创建一个新数据库用户帐号的过程如下:
打开 SQL Server管理平台,展开要登录的服务器和数据库文件夹,然后展开要创建用户的数据库及安全文件夹,右击用户图标,从快捷菜单中选择“新建用户”选项,则出现“数据库用户 —新建”对话框,如图 10-6所示。
在用户名框内输入数据库用户名称,
在登录名选择框内选择已经创建的登录帐号,然后在下面的数据库角色成员选择框中为该用户选择数据库角色,
最后单击“确定”按钮即可完成数据库用户的创建。 图 10-6 新建数据库用户对话框
10.2.1服务器登录帐号和用户帐号管理
2,用户帐号管理
同样,在 SQL Server 管理平台中,也可以查看或者删除数据库用户,方法是:展开某一数据库,选中用户图标,则在右面的页框中显示当前的数据库的所有用户,如图 10-7所示。
要删除数据库用户,则在右面的页框中右击所要删除的数据库用户,从弹出的快捷菜单中选择“删除”选项,则会从当前的数据库中删除该数据库用户。 图 10-7 管理数据库用户对话框
10.2.2 许可(权限)管理
许可用来指定授权用户可以使用的数据库对象和这些授权用户可以对这些数据库对象执行的操作。用户在登录到 SQL Server
之后,其用户帐号所归属的 Windwos组或角色所被赋予的许可
(权限)决定了该用户能够对哪些数据库对象执行哪种操作以及能够访问、修改哪些数据。在每个数据库中用户的许可独立于用户帐号和用户在数据库中的角色,每个数据库都有自己独立的许可系统。
在 SQL Server中包括三种类型的许可:即对象许可、语句许可和预定义许可。
10.2.2 许可(权限)管理
对象许可表示对特定的数据库对象(即表、视图、字段和存储过程)的操作许可,它决定了能对表、视图等数据库对象执行哪些操作。如果用户想要对某一对象进行操作,其必须具有相应的操作的权限。表和视图许可用来控制用户在表和视图上执行 SELECT,INSERT,UPDATE和 DELETE语句的能力。字段许可用来控制用户在单个字段上执行 SELECT,UPDATE和 REFERENCES操作的能力。存储过程许可用来控制用户执行 EXECUTE语句的能力。
语句许可表示对数据库的操作许可,也就是说,创建数据库或者创建数据库中的其他内容所需要的许可类型称为语句许可。这些语句通常是一些具有管理性的操作,如创建数据库、表和存储过程等。这种语句虽然仍包含有操作的对象,
但这些对象在执行该语句之前并不存在于数据库中。因此,语句许可针对的是某个 SQL语句,而不是数据库中已经创建的特定的数据库对象。
预定义许可是指系统安装以后有些用户和角色不必授权就有的许可。其中的角色包括固定服务器角色和固定数据库角色,用户包括数据库对象所有者。只有固定角色或者数据库对象所有者的成员才可以执行某些操作。执行这些操作的许可就称为预定义许可。
10.2.2 许可(权限)管理
许可的管理包括对许可的授权、否定和收回。
在 SQL Server中,可以使用 SQL Server管理平台和 Transaction_SQL 语句两种方式来管理许可。
1,使用 SQL Server 管理平台管理许可
SQL Server 可通过两种途径实现对用户许可的设定:
( 1)面向单一用户
( 2)面向数据库对象的许可设置。
10.2.2 许可(权限)管理
1,使用 SQL Server 管理平台管理许可
( 1)面向单一用户的许可设置。
其具体过程如下:
在 SQL Server管理平台中,展开服务器和数据库,单击用户图标,
此时在右面的页框中将显示数据库的所有用户。在数据库用户清单中,右击要进行许可设置的用户,从弹出的快捷菜单中选择
“属性”选项,则出现数据库用户属性对话框,选择“安全对象”
页框,如图 10-8所示。 图 10-8 数据库用户属性对话框
10.2.2 许可(权限)管理
1,使用 SQL Server 管理平台管理许可
( 1)面向单一用户的许可设置。
在上页对话框中单击“添加”按钮,则弹出“添加对象”对话框,如图 10-9
所示。选择“特定对象”单选钮后,出现如图 10-10所示的对话框图 10-9 添加对象对话框 图 10-10 选择对象对话框
10.2.2 许可(权限)管理
1,使用 SQL Server 管理平台管理许可
( 1)面向单一用户的许可设置。
点击“确定”后则出现图 10-11所示的对话框。在该对话框中可以进行对象许可的设置。点击对话框底部“列权限”按钮,出现如图 10-12所示对话框,在该对话框中可以选择用户对哪些列具有哪些权限。最后单击“确定”按钮即可完成许可的设置。
图 10-11 设置对象权限对话框 图 10-12 设置列权限对话框
10.2.2 许可(权限)管理
1,使用 SQL Server
管理平台管理许可
( 1)面向单一用户的许可设置。
在如图 10-13所示的数据库用户常规选项页中,
如果在“数据库角色成员身份”选项栏中选择一个数据库角色,实际上就完成了数据库用户语句许可的设置。因为对于这些数据库固定角色,SQL Server已经定义了其具有哪些语句许可。 图 10-13 数据库用户属性常规页框
10.2.2 许可(权限)管理
1,使用 SQL Server
管理平台管理许可
( 2) 面向数据库对象的许可设置 。
在 SQL Server 管理平台中,
展开服务器和数据库,然后选择需要设置的用户对象,
即表、视图、存储过程等,
在右面的页框中选择要进行许可设置的对象,右击该对象,从弹出的快捷菜单中选择“属性”选项,出现对象属性对话框,在该对话框中选择“权限”页框,单击
“添加”按钮设置好相应的对象许可后,如图 10-14所示,单击“确定”按钮即可完成数据库对象的许可设置。 图 10-14 表属性中的权限对话框
10.2.2 许可(权限)管理
2.使用 Transaction_SQL 语句
Transaction-SQL 语句使用 grant,revoke和 deny
三种命令来管理权限,相关的语法和实例可参照第
3章数据控制语言部分。
10.2.3 角色管理
角色定义了常规的 SQL Server 用户类别。每种角色将该类别的用户与其使用 SQL Server时执行的任务集以及成功完成这些任务所需的知识相关联。利用角色,SQL Server
管理者可以将某些用户设置为某一角色,这样只要对角色进行权限设置便可以实现对所有用户权限的设置,大大减少了管理员的工作量。
SQL Server提供了用户通常管理工作的预定义服务器角色和数据库角色。用户还可以创建自己的数据库角色,以便表示某一类进行同样操作的用户。当用户需要执行不同的操作时,只需将该用户加入不同的角色中即可,而不必对该用户反复授权许可和收回许可。
10.2.3 角色管理
1,服务器角色
服务器角色是指根据 SQL Server的管理任务,以及这些任务相对的重要性等级来把具有 SQL Server管理职能的用户划分为不同的用户组,每一组所具有的管理 SQL Server的权限都是 SQL Server内置的。服务器角色存在于各个数据库之中,要想加入用户,该用户必须有登录帐号以便加入到角色中。
SQL Server2005提供了八种常用的固定服务器角色,其具体含义如下所示:
系统管理员( sysadmin):拥有 SQL Server所有的权限许可;
服务器管理员( Serveradmin):管理 SQL Server服务器端的设置;
磁盘管理员( diskadmin):管理磁盘文件;
进程管理员( processadmin):管理 SQL Server系统进程;
安全管理员( securityadmin):管理和审核 SQL Server系统登录;
安装管理员( setupadmin):增加、删除连接服务器,建立数据库复制以及管理扩展存储过程;
数据库创建者( dbcreator):创建数据库,并对数据库进行修改。
批量数据输入管理员( bulkadmin):管理同时输入大量数据的操作。
10.2.3 角色管理
2,数据库角色
数据库角色是为某一用户或某一组用户授予不同级别的管理或访问数据库以及数据库对象的权限,这些权限是数据库专有的,并且还可以使一个用户具有属于同一数据库的多个角色。
SQL Server提供了两种类型的数据库角色:
( 1)固定的数据库角色;
( 2)用户自定义的数据库角色。
10.2.3 角色管理
2,数据库角色
( 1)固定的数据库角色固定的数据库角色是指 SQL Server已经定义了这些角色所具有的管理、访问数据库的权限,而且 SQL
Server管理者不能对其所具有的权限进行任何修改。
SQL Server中的每一个数据库中都有一组固定的数据库角色,在数据库中使用固定的数据库角色可以将不同级别的数据库管理工作分给不同的角色,从而有效地实现工作权限的传递。
10.2.3 角色管理
2,数据库角色
( 1)固定的数据库角色
SQL Server提供了十种常用的固定数据库角色来授予组合数据库级管理员权限:
public:每个数据库用户都属于 public 数据库角色,当尚未对某个用户授予或拒绝对安全对象的特定权限时,则该用户将继承授予该安全对象的 public 角色的权限;
db_owner:可以执行数据库的所有配置和维护活动;
db_accessadmin:可以增加或者删除数据库用户、工作组和角色;
db_ ddladmin:可以在数据库中运行任何数据定义语言 (DDL) 命令;
db_securityadmin:可以修改角色成员身份和管理权限;
db_backupoperator:可以备份和恢复数据库;
db_datareader:能且仅能对数据库中的任何表执行 select操作,从而读取所有表的信息;
db_datawriter:能够增加、修改和删除表中的数据,但不能进行 SELECT操作;
db_denydatareader:不能读取数据库中任何表中的数据;
db_denydatawriter:不能对数据库中的任何表执行增加、修改和删除数据操作。
10.2.3 角色管理
2,数据库角色
( 2)用户自定义角色
创建用户定义的数据库角色就是创建一组用户,这些用户具有相同的一组许可。
如果一组用户需要执行在 SQL Server中指定的一组操作并且不存在对应的
Windows组,或者没有管理 Windows用户帐号的许可,就可以在数据库中建立一个用户自定义的数据库角色。用户自定义的数据库角色有两种类型:即标准角色和应用程序角色。
标准角色通过对用户权限等级的认定而将用户划分为不用的用户组,使用户总是相对于一个或多个角色,从而实现管理的安全性。所有的固定的数据库角色或 SQL Server管理者自定义的某一角色都是标准角色。
应用程序角色是一种比较特殊的角色。当我们打算让某些用户只能通过特定的应用程序间接地存取数据库中的数据而不是直接地存取数据库数据时,就应该考虑使用应用程序角色。当某一用户使用了应用程序角色时,他便放弃了已被赋予的所有数据库专有权限,他所拥有的只是应用程序角色被设置的角色。通过应用程序角色,能够以可控制方式来限定用户的语句或者对象许可。
10.2.3 角色管理
3,使用 SQL Server
管理平台管理角色
( 1)管理服务器角色。
打开 SQL Server管理平台,
展开指定的服务器,单击安全性文件夹,然后单击服务器角色图标,在右边的页框中右击所要的角色,从弹出的快捷菜单中选择“属性”
选项,则出现服务器角色属性对话框,如图 10-15所示。
在该对话框中我们可以看到属于该角色的成员。单击
“添加”按钮则弹出添加成员对话框,其中可以选择添加新的登录帐号作为该服务器角色成员,单击删除按钮则可以从服务器角色中“删除”选定的帐号。 图 10-15 服务器角色属性对话框
10.2.3 角色管理
3,使用 SQL Server
管理平台管理角色
( 2)管理数据库角色。
在 SQL Server管理平台中,
展开指定的服务器以及指定的数据库,然后展开安全性文件夹,右击数据库角色图标,从弹出的快捷菜单中选择“新建数据库角色”选项,
则出现新建数据库角色对话框,如图 10-16所示。在名称文本框中输入该数据库角色的名称;点击架构前的复选框,可设定此角色拥有的架构;单击“添加”按钮,
可将数据库用户增加到新建的数据库角色中;最后单击
“确定”按钮即可完成新的数据库角色的创建。 图 10-16,数据库角色 —新建”对话框
10.2.3 角色管理
4,使用存储过程管理角色
( 1) 管理服务器角色
在 SQL Server中,管理服务器角色的存储过程主要有两个:
sp_addsrvrolemember和 sp_dropsrvrolemember。
系统存储过程 sp_addsrvrolemember可以将某一登录帐号加入到服务器角色中,使其成为该服务器角色的成员。其语法形式如下:
sp_addsrvrolemember login,role
系统存储过程 sp_dropsrvrolemember可以将某一登录者从某一服务器角色中删除,当该成员从服务器角色中被删除后,便不再具有该服务器角色所设置的权限。其语法形式如下:
sp_dropsrvrolemember [@loginame=]?login?,[@rolename=]?role?
其中,@loginame为登录者名称; @rolename为服务器角色。
10.2.3 角色管理
4,使用存储过程管理角色
( 2) 管理数据库角色在 SQL Server中,支持数据库管理的存储过程主要有六种:
create role:用来创建一个新的数据库角色,create role语法形式如下:
create role role_name [ AUTHORIZATION owner_name ]
其中,role_name 为待创建角色的名称; AUTHORIZATION owner_name为拥有新角色的数据库用户或角色。如果未指定用户,则执行 CREATE ROLE 的用户将拥有该角色。
droprole:用于从当前数据库角色中删除一个数据库角色,Droprole的语法形式如下:
Drop role role_name
sp_helprole:用来显示当前数据库中所有数据库角色的全部信息。其语法形式如下:
sp_helprole [?role?]
sp_addrolemember:用来向数据库某一角色中添加数据库用户,这些角色可以是用户自定义的标准角色,也可以是固定的数据库角色,但不能是应用程序角色。其语法形式如下:
sp_addrolemember role,security_account
sp_droprolemember:用来删除某一角色的用户。其语法形式如下:
sp_droprolemember role,security_account
sp_helprolemember:用于显示某一数据库角色的所有成员。其语法形式如下
sp_helprolemember [?role?]