代码改变世界

6.2 sql安全性

2018-07-24 08:46  笑一笑十年少!!!  阅读(260)  评论(0编辑  收藏  举报

最后的例子将显示如何通过现有证书创建-个新的用户。本章稍后会介绍证书,但在

这个例子中,首先创建证书,后创建用户:

USE AdventureWorks2008; CREATE CERTIFICATE SalesCert ENCRYPTION BY PASSWORD ='P@ssw0rd'

WITH SUBJECT = fSales Schema Certificate EXPIRYDATE =•12/31/2010•;

GO

CREATE USER SalesSecurity FOR CERTIFICATE SalesCert GO

也可以使用ALTER USER语句来更改用户帐户。这里再次体现了 Transact-SQL的灵活性

Management Studio 大得多。ALTER SCHEMA 可用于修改 name 属性和 DEFAULT SCHEMA

属性。如果希望更改帐户所关联的Windows SQL登录名,也可以使用LOGIN=选项。 要知道,LOGIN选项只能用于将用户与和其最初创建时同类型的登录名相关联。对于作为

证书或密钥创建的用户,这个选项并不适用。下面的例子演示了这些选项:

USE AdventureWorks2008 ALTER USER SalesSecurity WITH NAME =SalesSchem.aSecurity;

GO

USE AdventureWorks2008 ALTER USER BillyBob WITH DEFAULT^SCHEMA =Production;

GO

--Create a new login USE master CREATE LOGIN TempCarol WITH PASSWORD = *MyPassword*, CHECK_POLICY =OFF;

GO

USE tempdb ALTER USER Carol WITH Login =TempCarol;

GO

最后,一旦一个用户不再有用,可以使用DROP USER语句把它从数据库中删除。DROP

USER语句很简单,如下所示:

USE AdventureWorks2008 DROP USER BillyBob; GO

 

较早版本的SQL将对象所有者显式捆绑到对象的命名上下文中。例如,如果名为

BillyBob的用户创建了一个名为Orders的表,那么该表将被命名为BillyBob.Orders。SQL

Server2008允许将对象架构与其所有者相分离。当删除一个用户时,将其拥有的对象保留 在可能为一个角色或一个Windows组所有的架构中,这种分离有助于减少孤立对象。在以 往版本中可以看到,管理全部由dbo拥有的对象更加简单,但使用架构有助于提供一个更 合乎逻辑和层次化的安全设计。

6 .2 .5 固定数据库角色

每个SQLServer数据库都有一系列固定数据库角色,可用于在必要时把权限委托给用 户。和固定服务器角色一样,对于固定数据库角色来说,唯一可以改变的就是成员资格。

知道如何以及何时使用这些角色十分重要。

6-9列出了固定数据库角色。

注意,固定数据库角色包括db denydatareader db_denydatawriter。这些角色显式拒

绝对数据库中的用户表的读或写,& 小心使用。拒绝权限是绝对的,不能被覆盖。

用户定义的数据库角色对管理权限和对数据库中的资源的访问提供了更多的控制。在

使用基于角色的安全模型时,可能经常发现内置主体(比如Windows中的组或SQL中的角 )提供了过多的访问权限,或者没有提供足够的权限。在这种情况下,可以创建用户定义

的角色,控制整个一组用户对安全对象的访问。在概念上,数据库角色与Windows组很相 似。您可以创建一个数据库角色来标识一组需要访问共同资源的用户,或者也可以用角色

来标识授予数据库中的一个安全对象的权限。不管角色的用途是什么,其功能应由角色名

称明确指出。

1 . Management Studio中新建一个用户定义的数据库角色

“数据库角色-新建”对话框中,系统会提示为一个角色提供一个名称,并为该角

色指定一个所有者。角色的所有者可以在任何时候修改该角色。也可以为该角色选择现有

的架构,并添加用户作为这一角色的成员。除了 “常规”属性页之外,还 “安全对象” 

页和“扩展属性”页,它们可以分别用来指派权限或者设置额外属性。

在这个例子里,可以创建一个名为ProductionRole的新数据库角色,然后将Carol 加为其成员:

(1) “对象资源管理器”中展开“数据库”节点。

(2) 展开AdventureWorks2008节点,然后展开“安全性”节点。

(3) “角色”节点,然后展开“数据库角色”节点。

(4) “数据库角色”文件夹,选 “新建数据库角色”命令,这将打开“数据库

角色一新建”对话框(如图6-7所示)。

(5)  “角色名称”框中, ProductionRole。

(6) 在该角色的成员列表(应该是空的)下,单击“添加”按钮。
(7) 在窗口中输入C arol,单击“检查名称”按钮。这样将解析她的名称。单击“确定” 按钮。
(8) 在 “数据库角色-新建”窗口中,单 击 “确定”按钮。
2. CREATE ROLE 语句
CREATE ROLE是Transact-SQL中用来新建用户定义的数据库角色的语句。使用CREATEROLE语句时,也可以指定角色的所有者。注意,如果要指派一个用户作为角色所有者,
那么必须有IMPERSONATE权限。如果指派另一个角色作为所有者,则必须是该角色的成
员,或者具有对该角色使用ALTER的权限。下列语句创建了一个名为SalesStaff的角色, 并指派Carol为所有者:
USE AdventureWorks2008 CREATE ROLE SalesStaff AUTHORIZATION Carol;
GO
ALTER ROLE语句的功能相当有限,仅允许更改角色的名称:
USE AdventureWorks2008 ALTER ROLE SalesStaff WITH NAME =SalesStaffRole;
GO
DROP ROLE rolename可用于从数据库中删除不再需要的角色:
USE AdventureWorks2008 DROP ROLE SalesStaffRole;
GO
和固定服务器角色一样,通过SQL Server Management Studio或存储过程,可以将用户添
加到固定的和用户定义的数据库角色中。针对数据库角色的存储过程是sp_addrolem ember。与
向服务器角色添加或从中删除成员的存储过程不同,sp addrolemember和 sp droprolemember
将角色标识为第一变量,将用户标识为第二变量。
下面的示例将数据库用户Carol添加到db datareader角色中:
USE AdventureWorks2008 EXEC sp_addrolemember * db_datareader *, 1 Carol1;
GO
要将Carol从 db_datareader角色中删除,可执行下列存储过程:
USE AdventureWorks2008 EXEC sp_dropro1emember 'db_datareader', 'Carol1 ;
GO
3 .应用程序角色
另外一种可以用来帮助保护数据库环境的角色类型是应用程序角色。应用程序角色和
标准的角色类型截然不同,它们没有成员,可以(而且应该)被配置为使用密码进行身份验
证。当运行一个特定的应用程序的所有用户必须采用同样的数据库访问时,通常使用应用
程序角色。应用程序可以不需要提示用户提供用户名和密码就实例化应用程序角色,从而
避免了依赖于个人用户是否拥有适当的访问权限让应用程序正常工作。
可以在SQL Server Management Studio的 “应用程序角色”文件夹中创建一个新的应
用程序角色。创建新的应用程序角色的对话框和标准数据库角色对 话 框 非 常 相 只 是 它有密码字段,但没有成员列表。
创建•-个应用程序角色
本例创建一个名为PurchasingOrderEntry的新应用程序角色,密码是POEpassl:
(1) 在 “对象资源管理器’’中 展 开 “数据库”节点。
(2) 展 开 AdventureWorks2008, 然后展开“安全性”节点。
(3) 展 开 “角色”节点,然后 展 开 “应用程序角色”节点。
(4) 右 击 “应用程序角色”文件夹,选 择 “新建应用程序角色”命令,这 将 打 开 “应
用程序角色一新建”对话框(如图6-8所示)。
(5) 输入角色名称 PurchasingOrderEntry。 (6) .将默认架构设置为Purchasing。
(6)(7) 在 “密码”和 “确认密码”框中输入POEpassl。 (8) 单 击 “确定”按钮。

下一节将讨论如何实例化该角色。

4 .使用 CREATE APPLICATION ROLE

CREATE APPLICATION ROLE的作用正如其名。使用这个语句时,可指定应用程序

角色的名称和该角色的密码,并可以为该角色设覽默认架构。下面的示例创建了一个名为

SalesApp的应用程序角色:

USE AdventureWorks2008 CREATE APPLICATION ROLE SalesApp WITH PASSWORD = ,P@ssw0rd', DEFAULT_SCHEMA =Sales; GO

要使用应用程序角色,可以执行sp_setapprole存储过程。可以从一个应用程序中调用 该存储过程,或者在査询窗口中测试它。该存储过程包括了激活应用程序角色的选项:提

供加密的密码,创建一个cookie并在cookie中设置信息。下面的命令激活了 SalesApp 用程序角色,然后返冋用户名:

USE AdventureWorks2008 GO

DECLARE Gcookie varbinary(8000); EXEC sp_setapprole * SalesApp1, 1PQsswOrd' , QfCreateCookie =true, Qcookie =@cookie OUTPUT;

GO

SELECT USER_NAME();

一旦执行了上述脚本,该连接执行的所有活动都将在该应用程序角色下操作。当关闭

连接时,应用程序角色会话也会终止。

通过ALTER APPLICATION ROLE语句,可以更改应用程序角色的名称、密码和默认

架构。下面的示例将角色名称SalesApp改为Order Entry,并设置了一个新密码:

USE AdventureWorks2008 ALTER APPLICATION ROLE SalesApp WITH NAME =OrderEntryF PASSWORD =*newP@ssw0rd,; GO

如果想运行该ALTER APPLICATION ROLE脚本,清确保没有正以这个应用程序角色

进行连接。在自己的凭据下打开一个新的査询窗口可以防止错误发生。

DROP APPLICATION ROLE rolename可从数据库中删除一个应用程序角色。确保没有

任何应用程序仍在使用该应用程序角色,否则该应用程序将无法连接到数据库,例如:

USE AdventureWorks2008 DROP APPLICATION ROLE OrderEntry;

GO

5 .更多信息

6-10列出的安全目录视图可以用来标识数据库中的主体以及它们的角色成员资格。

 

为了向后兼容,Microsoft SQL Server 2008支持表6-11列出的存储过程。记住,这些

存储过程是“遗留”工具, SQL Server的未来版本中可能会被删除。