图34-6 欢迎使用建立登入精灵画面
2. 按 下一步 进入 选取这个登入的验证模式 画面,如图34-7所示。在这个画面中,您可以指定是否使用 Windows 验证或 SQL Server 验证(混合模式)。
图34-7 选取这个登入的验证模式画面
3. 按 下一步 进入 使用Windows NT的账户验证 画面或 使用SQL Server的验证 画面,出现的画面取决于步骤 2 中选取的验证模式。图34-8显示稍后的画面。在这个画面中指定登入 ID 和密码。如果选择的是 Windows NT 验证,请键入网域名称和使用者账户名称。
图34-8 使用 SQL Server 的验证画面
4. 按 下一步 ,显示 同意对安全性角色的存取 画面,如图34-9所示。在这个画面中,可以选取分配到该登入账户上的数据库角色。
图34-9 同意对安全性角色的存取画面
5. 按 下一步 进入 同意对数据库进行存取画面 ,如图34-10所示。在这个画面中可以选取登入账户可以存取的数据库。
图34-10 同意对数据库进行存取画面
6. 按 下一步 进入 完成建立登入精灵 画面,如图34-11所示,这里可以在文字方块中检查摘要信息。要变更设定可按 上一步 回到之前的画面,按 完成 即可完成建立新登入账户。
图34-11 完成建立登入精灵画面
建立 SQL Server 使用者
SQL Server 使用者可以利用 Enterprise Manager 或 T-SQL 建立。(在 SQL Server 中并没有用来完成这项设定的精灵)。本节中将利用这两种方式建立 SQL Server 使用者。请记住,SQL Server 使用者是为特定的数据库所定义,且特定的使用者登入名称对该数据库有不同的使用权限。SQL Server 使用者 ID 可被视为 SQL Server 登入账户的同义词,但是在登入时两者并不需要使用相同的名称。
________________________________________
说明
建立 SQL Server 使用者前,必须先为该使用者定义 SQL Server 登入账户,因为使用者名称需参照 SQL Server 登入账户。
________________________________________
使用 Enterprise Manager 建立使用者
与 SQL Server 登入账户不同的是,登入账户是在 Enterprise Manager 的 Security 数据夹中建立的,而 SQL Server 使用者则在 Enterprise Manager 左侧选单的指定数据库档案夹中建立。要使用 Enterprise Manager 建立使用者,请按照下列步骤操作:
1. 在需要建立使用者的数据库上按一下鼠标右钮,在快捷菜单中选择 新增 ,然后选择 数据库使用者 ,进入 数据库使用者属性 窗口,如图34-12所示。在 登入名称 下拉式清单中键入一个有效的 SQL Server 登入账户名称,并在 使用者名称 文字方块中键入新的使用者名称。在 数据库角色使用权限 清单中选取合适的复选框,为新使用者分配数据库角色。在本章的后面可以看到,为这些角色分配权限,便能够将权限套用到使用者上。
图34-12 数据库使用者属性画面
2. 按下 属性 按钮进入 数据库角色属性 画面,如图34-13所示。在这个窗口中可以更改选取的数据库角色。这个任务将在本章的 <管理数据库角色> 一节中解释。
图34-13 数据库角色属性画面
3. 在我们完成了这些设定选项后,按两次 确定 即可建立数据库使用者。
使用 T-SQL 建立使用者
要使用 T-SQL 建立数据库使用者,可以执行 sp_adduse 预存程序。这个预存程序可以在 ISQL 或 OSQL 中执行,语法如下:
sp_adduser [ @loginame = ] 'login'
[ , [ @name_in_db = ] 'user' ]
[ , [ @grpname = ] 'group' ]
Login 这个参数是 SQL Server 登入账户的名称,是必须提供的数据。user 变量是新的使用者名称,group 则是新使用者所隶属的群组或角色。如果没有指定 user 值,那么它的值会与 login 参数相同。
下面的命令建立了一个新的数据库使用者,其名称为 JackR 和 Windows NT 或Windows 2000 账户 FORT_WORTH\DB_User:
sp_adduser 'FORT_WORTH\DB_User', 'JackR'
FORT_WORTH 是系统或者网域名称,而 DB_User 是 Windows NT 或Windows 2000 账户名称。
管理数据库存取权限
存取权限 (permissions)用来控制数据库对象的存取,并指定可操作特定数据库操作的使用者。可以将服务器和数据库存取权限都设定。服务器存取权限允许 DBA 执行数据库管理任务,数据库存取权限则是用来允许或者禁止存取数据库对象和陈述式。本节中将讨论存取权限的类型,以及如何分配存取权限。
服务器存取权限
服务器存取权限是分配给 DBA,允许DBA执行管理任务。这些存取权限定义在固定服务器角色。使用者登入账户也可以分配给固定服务器角色,但是这些角色不能被更改。(在本章稍后的 <使用固定的服务器角色> 一节中将讨论服务器角色。)服务器存取权限包括 SHUTDOWN、CREATE DATABASE、BACKUP DATABASE 和 CHECKPOINT 存取权限。服务器存取权限只能授权 DBA 作为执行管理任务使用,而不需要更改或者授予个人使用者。
数据库对象存取权限
数据库对象权限是权限类型中,属于允许数据库对象存取的类型。在存取数据表或检视使用 SQL 陈述式(如 SELECT、INSERT、UPDATE 和 DELETE)存取对象时,就需要使用对象存取权限。使用 EXECUTE 陈述式执行预存程序时也需要对象存取权限。
使用 Enterprise Manager 指定对象存取权限
要使用 Enterprise Manager 将数据库对象存取权限授予使用者,请按照下列步骤操作:
1. 展开服务器群组,展开一个服务器,展开需要分配存取权限的数据库,然后选取 使用者 数据夹。在右边窗格中会列出使用者。请在使用者名称上按一下鼠标右钮,并从快捷菜单中选择 内容 ,进入 数据库使用者属性 窗口,如图34-14所示。
图34-14 「数据库使用者属性」窗口
2. 按下 权限 按钮,进入 数据库使用者属性 窗口,如图34-15所示。(也可以在使用者名称上按一下鼠标右钮,从快捷菜单中选择 所有工作 ,然后选择 管理使用权限 来进入这个个窗口)。这里可以管理分配该使用者的存取权限,可以为该使用者分配多种存取权限,利用画面中的复选框指定 SELECT、INSERT、UPDATE、DELETE、EXEC 和 Declarative Referential Integrity(DRI)窗体数据列的存取权限。这些对象列在 对象 数据列中。也可以使用画面上方的选项来列出所有的对象,或只显示这个使用者有权限的对象。
图34-15 数据库使用者属性窗口中的权限窗口
使用 T-SQL 分配对象存取权限
执行 GRANT 陈述式,可利用 T-SQL 将对象存取权限指定给使用者。GRANT陈述式的语法如下:
GRANT {ALL | permission}
[ column ON {table | view} ] |
[ ON table(column) ] |
[ ON view(column) ] |
[ ON {stored_procedure | extended_procedure} ]
TO security_account
[ WITH GRANT OPTION ]
[ AS {group | role} ]
security_account 参数必须是下列账户类型之一:
• Microsoft SQL Server使用者
• Microsoft SQL Server角色
• Microsoft Windows NT 或 Windows 2000 使用者
• Windows NT 或 Windows 2000 群组
使用 GRANT OPTION 关键词允许使用者将该权限授予其它使用者。这在授予存取权限给其它的 DBA 时很有用。然而,应该要小心使用 GRANT 选项。
AS 选项指定要执行 GRANT 陈述式的权限。GRANT 陈述式必须在使用者或角色有被授予权限时才能执行。
GRANT 陈述式可以按照下面的方式使用:
GRANT SELECT , INSERT, UPDATE
ON Customers
TO Guest
WITH GRANT OPTION
AS Accounting
因为 Accounting 角色可以在 Customers 资料表上授予存取权限,所以要使用AS Accounting 选项。GRANT OPTION 关键词让 MaryW 可将存取权限授予其它的使用者。
________________________________________
相关信息
要检视 GRANT 陈述式中指定的存取权限清单,请参阅< 在线丛书 >索引中的GRANT。
________________________________________
使用 T-SQL 撤销对象存取权限
您可以用 T-SQL REVOKE 命令来撤销使用者的对象存取权限。REVOKE 陈述式的语法如下:
REVOKE [ GRANT OPTION FOR ]
{ ALL [ PRIVILEGES ] | permission }
[ column ON {table | view} ] |
[ ON table(column) ] |
[ ON view(column) ] |
[ ON {stored_procedure | extended_procedure} ]
{ TO | FROM } security_account
[ CASCADE ]
[ AS {group | role} ]
security_account 参数必须是下列账户类型之一:
• Microsoft SQL Server 使用者
• Microsoft SQL Server 角色
• Microsoft Windows NT 或 Windows 2000 使用者
• Windows NT 或 Windows 2000 群组
与撤销存取权限相同,GRANT OPTION FOR 选项允许您撤销之前用 GRANT OPTION 关键词授予的存取权限。AS 选项指定要执行 REVOKE 陈述式的权限。
以下是使用 REVOKE 陈述式的范例:
REVOKE ALL
ON Customers
TO MaryW
REVOKE AL L陈述式将移除在 Customers 数据表中使用者 MaryW 拥有的所有存取权限。
________________________________________
相关信息
要检视在 REVOKE 陈述式中指定的存取权限清单,请查阅《在线丛书》索引中的 REVOKE。
________________________________________
数据库陈述式存取权限
除了数据库对象存取权限,您还可以分配陈述式存取权限。对象存取权限让使用者存取数据库中现存的对象,而陈述式存取权限则授权使用者建立数据库对象,包括数据库和数据表。陈述式存取权限如下:
• BACKUP DATABASE 执行 BACKUP DATABASE 命令
• BACKUP LOG 执行 BACKUP LOG 命令
• CREATE DATABASE 用来建立新的数据库
• CREATE DEFAULT 用来建立可关联至字段的默认值
• CREATE PROCEDURE 用来建立预存程序
• CREATE RULE 用来建立规则
• CREATE TABLE 用来建立新的数据表
• CREATE VIEW 用来建立新的检视
陈述式存取权限可以用 Enterprise Manager 或 T-SQL 分配。
使用 Enterprise Manager 分配陈述式存取权限
要使用 Enterprise Manager 为使用者授予数据库的陈述式存取权限,请按照下列步骤操作:
1. 展开一个服务器群组,展开一个服务器,然后展开 数据库 数据夹。在需要分配存取权限的数据库上按一下鼠标右钮,并从快捷菜单中选择 内容 ,显示数据库的属性窗口,如图34-16所示。
图34-16 数据库的属性窗口
2. 选取 权限 页签,如图34-17所示。在这里可以为存取该数据库的使用者分配存取权限。这些数据列包含复选框,规定了所要分配的陈述式存取权限,而 使用者/角色 字段列出了存取这个数据库的使用者和角色。
图34-17 数据库属性窗口的权限页签
使用 T-SQL 分配陈述式存取权限
您可以使用 GRANT T-SQL 陈述式为使用者分配陈述式存取权限。GRANT 陈述式的语法如下:
GRANT { ALL | statement }
TO security_account
可以分配给使用者的陈述式存取权限包括 CREATE DATABASE、CREATE DEFAULT、CREATE PROCEDURE、CTEATE RULE、CREATE TABLE、CREATE VIEW、BACKUP DATABASE 和 BACKUP LOG,如前所述。例如要为使用者账户 Elea 新增 CREATE DATABASE和CREATE TABLE 陈述式存取权限,请使用下面的命令:
GRANT CREATE DATABASE,CREATE TABLE
TO 'Elea'
所以,为使用者账户新增陈述式存取权限其实并不困难。
使用 T-SQL 撤销陈述式存取权限
您也可以使用 T-SQL 陈述式 REVOKE 来撤销使用者账户的陈述式存取权限。REVOKE 陈述式的语法如下:
REVOKE { ALL | statement }
FROM security_account
例如,要从使用者账户 Elea 上撤销 CREATE DATABASE 陈述式存取权限,可使用下列命令:
REVOKE CREATE DATABASE
FROM 'Elea'
正如所见,撤销使用者的陈述式存取权限也不是个复杂的过程。
管理数据库角色
使用数据库角色可以简化管理使用者存取权限的工作。数据库角色就是设计用来允许一组使用者接受同样的数据库存取权限,这样便不需要个别的分配这些存取权限。不要分配给每个使用者个人的存取权限,可以为一组使用者建立角色,然后分配存取权限。
角色是为了特殊的工作群组、工作类别或工作任务而设计。在这种情况下,根据新使用者所执行的工作,它们可以成为一个或多个数据库角色的成员。例如,角色可能定义成工作类别,如支付性账户、接受性账户、工程以及人力资源等。当一个使用者加入这些部门或群组中时,他或她就被分配为这个角色的一个成员。一个使用者可以是一个或多个角色的成员,但是并不一定要求使用者成为某一角色的成员。除了成为数据库角色的成员以外,使用者也可以分配个人存取权限。
建立和修改角色
和 DBA 所执行的大多数任务一样,建立和修改数据库角色也可以透过Enterprise Manager 或 T-SQL 命令来完成。(SQL Server 没有提供这一类的精灵。)这两种方法必须完成同样的例行性任务:
• 建立数据库角色。
• 为角色分配存取权限。
• 为角色分配使用者。
当检视角色时,可以看到分配给角色的存取权限和分配给角色的使用者。
使用 Enterprise Manager 管理角色
要使用 Enterprise Manager 建立数据库角色,请按照下列步骤操作:
1. 展开一个服务器群组,展开一个服务器,然后展开 数据库 数据夹。在需要建立角色的数据库上按一下鼠标右钮(本范例使用 Northwind),并从快捷菜单中选择 新增 ,接着选择 数据库角色 。另外一种方法,可以展开数据库,在 角色 上按一下鼠标右钮,并从快捷菜单中选择 新增数据库角色 。这两种方法都可进入 数据库角色属性 窗口,如图34-18所示。
图34-18 「数据库角色属性」窗口
2. 在 名称 文字方块中键入名称来为角色分配描述性名称-请选择一个有助于记住角色功能的名称。
3. 按一下 新增 为角色分配使用者。这时将会显示可以存取该数据库的使用者账户清单,如图34-19所示。选取要分配给该角色的使用者。如果要取消选择使用者,只要在使用者名称上再按一下就可以了。在完成修改角色成员后,按一下 确定 即可建立了新角色。现在返回 Enterprise Manager 窗口中。
图34-19 新增角色成员对话框
4. 要为角色分配存取权限,先展开 角色 数据夹开启 数据库角色属性 窗口,在角色名称上按一下鼠标右钮,并从快捷菜单中选择 内容 。然后按一下 权限 ,进入 数据库角色属性 - Northwind 窗口,如图34-20所示。
在这个窗口中,可以为数据库中的对象角色分配不同的存取权限。选择清单中适合的复选框。数据库对象是列在 对象 数据列中的。选择窗口上方的选项可以检视所有的对象,或是列出这个角色有权限的对象。一旦分配了一个角色给某个使用者,使用者就获得了分配给这个角色的所有存取权限。
在建立了角色后,可以在 数据库角色属性 窗口中修改。要修改角色,请按照为角色增加存取权限的步骤操作。也可以在 数据库角色属性 窗口中新增以及删除使用者和存取权限。
使用 T-SQL 管理角色
也可以使用 sp_addrole 预存程序来建立角色。sp_addrole 预存程序的语法如下:
sp_addrole [ @rolename = ] 'role'
[ , [ @ownername = ] 'owner' ]
图34-20 数据库角色属性 - Northwind窗口
例如,要在 Northwind 数据库中加入一个名称为 readonly 的角色,请使用下列 T-SQL 命令:
USE Northwind
GO
sp_addrole 'readonly' , 'dbo'
GO
USE Northwind 命令选取 Northwind 为目前数据库。如果没有指定数据库,那么在预设数据库中会建立角色。
这个预存程序只能建立角色。要为角色增加存取权限,请使用前面描述的 GRANT 陈述式。要为角色删除存取权限,请使用 REVOKE 陈述式。
例如,要为 readonly 角色增加 Employees、Customers 和 Orders 数据表的SELECT 存取权限,请使用下列的 GRANT 陈述式:
USE Northwind
GO
GRANT SELECT
ON Employees
TO readonly
GO
GRANT SELECT
ON Customers
TO readonly
GO
GRANT SELECT
ON Orders
TO readonly
GO
要为角色增加使用者,请使用 sp_addrolemember 预存程序。sp_addrolemember 预存程序的语法如下:
sp_addrolemember 'role','security_account'
下列命令可为 readonly 角色增加使用者:
USE Northwind
GO
sp_addrolemember 'readonly' , 'Guest'
GO
使用固定的服务器角色
在 SQL Server 安装时,建立了大量预先定义的服务器角色。这些固定服务器角色被用来授予存取权限给 DBA,这些角色包含了服务器存取权限以及对象和陈述式存取权限,清单如下:
• bulkadmin 可以执行大量插入
• dbcreator 可以建立和变更数据库
• diskadmin 可以管理磁盘档案
• processadmin 可以管理S QL Server 程序
• securityadmin 可以管理登入账户和建立数据库存取权限
• serveradmin 可以设定任何服务器选项,并且可以关闭数据库
• setupadmin 可以管理连结的服务器和启动程序
• sysadmin 可以执行任何服务器行为
为使用者账户分配固定服务器角色,可让使用者执行角色所拥有存取权限的管理任务。依需要让所有的DBA使用相同的管理账户可能会更好些。与数据库角色相比,固定服务器角色比个人存取权限更容易维护,但是固定服务器角色是不能修改的。您可以按照下列步骤为一个使用者分配固定服务器角色。
1. 在 Enterprise Manager 中展开一个服务器群组,展开一个服务器,展开 安全性 数据夹,然后选取 服务器角色 。在需要加入使用者的固定服务器角色上按鼠标右钮,并从快捷菜单中选择 内容 ,进入 服务器角色 窗口,如图34-21所示。
图34-21 服务器角色窗口
2. 按 新增 ,为新增的使用者账户分配固定服务器角色。这将呼叫 新增成员 对话框,如图34-22所示。
图34-22 新增成员对话框
3. 选取了需要加入固定服务器角色的使用者之后,按一下 确定 ,返回 服务器角色属性 窗口。请按一下 确定 为安全性角色新增使用者。
安全性账户授权
SQL Server 2000 使用 Kerberos 安全模式建立安全性。(关于 Kerberos 安全模式的信息可参阅 第 2 章 。)SQL Server 2000 使用 Kerberos 通讯协议来支持客户端与服务器之间的相互认证。这使得客户端的安全识别能够在计算机之间流通,于是就可连接到不同的服务器上;登入新的服务器时,可使用个人化的用户识别进行数据的存取。这就是安全性账户授权。
我们来看一个安全性账户授权的例子。假定一个用户连接到 Server A 为NTDOMAIN\AlexR,而 ServerA 又与 ServerB 相连接。那么 ServerB 就知道连接的安全性识别为 NTDOMAIN\AlexR。这减少了用户登入到 ServerB 的需求。
如果要使用安全性账户授权,所连接的所有服务器都必须能够执行 Windows 2000,并支持 Kerberos,而且您必须正在使用 Active Directory 服务。下列选项必须在 Active Directory 中设定,以便进行授权:
• 账户敏感无法授权 要求授权的使用者绝对不能选择这个选项。
• 账户可以授权 SQL Server 2000 的服务器账户一定要选这个选项。
• 计算机可以授权 执行 SQL Server 2000 的服务器一定要选这个选项。
设定 SQL Server
在使用安全性账户授权之前,必须先设定 SQL Server 2000 来接受授权。授权促成彼此相互确认。要使用安全性账户授权,SQL Server 2000 必须有 Windows 2000 账户网域管理员分配的 Service Principal Name(SPN)。SPN 必须分配到计算机上 SQL server 的服务器账户。SPN 必须证明 SQL server 是经由特定服务器以及 Windows 2000 账户网域管理员认证的。您可以让您的网域管理员使用在 Windows 2000 Resource Kit 上取得的 Setspn 公共程序,来为 SQL Server 建立一个 SPN。
要建立 SPN,请执行下列命令:
setspn -A MSSQLSvc/Host:port serviceaccount
以下为使用这个命令的范例:
setspn -A MSSQLSvc/MyServer.MyDomain.MyCompany.com sqlaccount
________________________________________
相关信息
关于 Setspn 公用程序的相关信息,请参阅 Windows 2000 文件。
________________________________________
您也必须用 TCP/IP 来使用安全性账户授权,不能使用已命名的管道,因为 SPN要使用特定的 TCP/IP 通讯端。如果使用多重连接埠,每个连接埠都必须有 SPN。
您可以用 LocalSystem 账户授权。SQL Server 将在服务器启动时自己注册登记,并且自动登记 SPN。这个选项比使用网域的使用者账户来授权还要容易。然而,当 SQL Server 关闭时,SPN 将无法替 LocalSystem 账户注册。为了在 LocalSystem 账户之下授权,请在 Setspn 公用程序中执行下列命令:
setspn -A MSSQLSvc/Host:port serviceaccount
________________________________________
说明
如果您要在 SQL Server 2000 中变更服务器账户,您必须删除之前定义的SPN,然后建立新的账户。
________________________________________
本章总结
本章学习了 SQL Server 使用者和安全性管理,也看到了如何使用数据库登入账户和数据库使用者账户允许数据库的存取。此外还学习如何建立与管理登入账户和数据库使用者,并学到了如何利用数据库角色简化使用者管理,并依照工作性质分配角色的存取权限。角色可以分配给多个使用者,让分配存取权限和修改变得更加容易。此外也看到了被称为固定服务器角色的特殊角色,这些角色是用来为使用者和 DBA 分配管理存取权限。最后我们看到了在 SQL Server 2000 中安全性的提升,使得服务器之间的安全性账户更能够安全地流通。在 第 35 章 中,我们将学习 SQL 预存程序以及如何调校 SQL 查询。
站长排行
学院
新闻
专栏
盈利
如果你有站长界人事变动、重组并购、变革技术出现,以及产品投诉等重要新闻线索,请告诉我们,我们会给予特别关注。
0631-3653338
站长中国编辑部
站长中国24小时新闻热线: 13256307008