教你修改SQL Server 2005 执行环境

ZDNet软件频道 时间:2008-09-22 作者:builder.com.cn | 天新网 我要评论()
本文关键词:数据库 Mssql SQL SQL Server
执行环境是SQL Server中设定用户权限的认证方式,当您登录到SQL Server时,登录账户就被赋予了一定的权限,其中可能包括登录的功能、访问数据库以及在数据库中执行某些操作的功能。

以下的脚本创建了一个过程可以插入新的TableOwnerSchema.MyTable表格,注意我在过程定义中使用了WITH EXECUTE AS "TableOwner"语句,这意味着该过程被执行的时候,它将在TableOwner的执行环境中被执行。

CREATE PROCEDURE usp_InsertMyTable

WITH EXECUTE AS "TableOwner"

AS 
BEGIN
INSERT INTO TableOwnerSchema.MyTable(Field1)VALUES(8)

END

GO

我还可以将执行权限赋予一个用户账户,在这种情况下,我使用以前创建的名为BaseUser的用户。

GRANT EXEC ON usp_InsertMyTable TO BaseUser
GO

接下来,我将执行环境转换为BaseUser并尝试运行存储过程:

EXECUTE AS USER = "BaseUser"

GO

EXEC usp_InsertMyTable

GO

现在我可以向TableSchema.MyTable表格中添加记录了,因为在这个过程中 TableOwner允许我这样做,而BaseOwner并没有明确的权限可以向该表格添加记录,所以该用户的任何尝试都会导致错误的发生。为了演示这个问题,可以运行以下的脚本,该脚本改变了我们刚才的过程,改为运行在调用者的执行环境中。

REVERT

GO

ALTER PROCEDURE usp_InsertMyTable

AS 
BEGIN
INSERT INTO TableOwnerSchema.MyTable(Field1)VALUES(8)

END

GO

EXECUTE AS USER = "BaseUser"

GO

EXEC usp_InsertMyTable

GO

REVERT

开发者和数据库管理员会发现在执行存储过程的时候转换权限非常有用,尤其是您处理TRUNCATE TABLE语句的时候,这个方法能帮上大忙,因为TRUNCATE TABLE并没有可以指定的权限。您可以将权限赋予将要进行截取表格操作的用户,然后在操作结束的时候再将原有的权限设定恢复就可以了。

数据库

Mssql

SQL

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134