修改SQLServer2005执行环境实例演示

此文主要是介绍正确对SQL Server 2005执行环境进行修改是实际操作的实例演示,正如我上一篇文章里所介绍的一样,改变存储过程的SQL Server 2005数据库的执行环境非常有用,接下来我将通过实例来讲解如何实现这一功能。

成都创新互联公司是一家专注于网站设计制作、成都网站设计与策划设计,蕉岭网站建设哪家好?成都创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:蕉岭等地区。蕉岭做网站价格咨询:13518219792

在这个例子中,您会看到如何使用EXECUTE AS将没有确切权限的使用者模拟为所有者对表格进行插入操作。

在第一行语句中,我使用了REVERT命令,这样,您就可以完整地返回到例子中,而不必担心需要清除任何对象。

 
 
 
  1. REVERT 
  2. GO 

在下面的代码的第七行,我使用了清除语句,这样可以检查我在随后的例子中要使用的对象是否已经存在,如果已经存在,就将其清除。

 
 
 
  1. IF OBJECT_ID('usp_InsertMyTable','P')>0 
  2. DROP PROCEDURE usp_InsertMyTable 
  3. GO 
  4. IF OBJECT_ID('TableOwnerSchema.MyTable','U')>0 
  5. DROP TABLE TableOwnerSchema.MyTable 
  6. GO 
  7. IF EXISTS 
  8. (SELECT * FROM sys.schemas WHERE name = N'TableOwnerSchema') 
  9. DROP SCHEMA [TableOwnerSchema] 
  10. IF EXISTS 
  11. (SELECT * FROM sys.database_principals WHERE name = N'BaseUser') 
  12. DROP USER BaseUser 
  13. IF EXISTS 
  14. (SELECT * FROM sys.server_principals WHERE name = N'BaseUser') 
  15. DROP LOGIN BaseUser 
  16. IF EXISTS 
  17. (SELECT * FROM sys.database_principals WHERE name = N'TableOwner') 
  18. DROP USER TableOwner 
  19. IF EXISTS 
  20. (SELECT * FROM sys.server_principals WHERE name = N'TableOwner') 
  21. DROP LOGIN TableOwner 

以下的脚本语句创建了两个登录名和数据库的用户账户,注意,CHECK_EXPIRATION和CHECK_POLICY语句,这两条语句是SQL Server 2005中新出现的。这些语句告诉SQL Server不要对这个用户账户强制执行密码截止期限策略,同时也不要进行任何类型的密码策略检查,对于强制安全策略而言,这些是非常有效的方法。

 
 
 
  1. CREATE LOGIN [BaseUser] WITH PASSWORD=N'baseuser', 
  2. DEFAULT_DATABASE=[TRS], 
  3. CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
  4. GO 
  5. CREATE USER [BaseUser] FOR LOGIN [BaseUser] 
  6. GO 
  7. CREATE LOGIN [TableOwner] WITH PASSWORD=N'tableowner', 
  8. DEFAULT_DATABASE=[TRS], 
  9. CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
  10. GO 
  11. CREATE USER TableOwner FOR LOGIN TableOwner 
  12. GO 

在SQL Server 2005中,模式不再是和数据库用户相同的事情了,对于所包含的对象而言,它处于完全不同的名称空间。用户和模式的分离是SQL Server 2005中的一大进步,这样做使对象的所有权可以分离,而且比SQL Server 2000更易于管理,以下的语句创建了我们将要使用的数据库模式:

 
 
 
  1. CREATE SCHEMA [TableOwnerSchema] AUTHORIZATION [TableOwner] 
  2. GO 
  3. Now I enable logins so they can be used: 
  4. ALTER LOGIN [TableOwner] ENABLE 
  5. ALTER LOGIN [BaseUser] ENABLE 
  6. GO 
  7. GRANT CREATE TABLE TO TableOwner 
  8. GO 

首先,我使用了EXECUTE AS命令,我将当前的SQL Server 2005执行环境设定为TableOwner,在运行了这个命令之后,所有的权限评估将以TableOwner运行,而以前的系统管理员权限将不再适用。

 
 
 
  1. EXECUTE AS USER = 'TableOwner' 
  2. GO 

运行这个语句就能够表明现在的SQL Server 2005执行环境是TableOwner:

 
 
 
  1. SELECT SESSION_USER 
  2. GO 

这个脚本将在TableOwnerSchema的模式中创建一个名为MyTable的表格,因为我已经赋予了该用户CREATE TABLE 的权限,所以TableOwner可以执行这条语句。

 
 
 
  1. CREATE TABLE TableOwnerSchema.MyTable 
  2. Field1 INT 
  3. GO 

当我运行REVERT语句的时候,可以在SQL Server 2005执行环境链中回退一步,在SQL Server 2005中,执行环境是可以嵌套的,所以如果您在同一个数据库连接中有很多用户在运行,您可能需要多次执行该语句以返回到原始的登录环境。

 
 
 
  1. REVERT 
  2. GO 
  3. SELECT SESSION_USER 
  4. GO 

现在我要对新的表格进行快速选择以确认它的存在:

 
 
 
  1. SELECT * FROM TableOwnerSchema.MyTable 
  2. GO

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

 
 
 
  1. CREATE PROCEDURE usp_InsertMyTable 
  2. WITH EXECUTE AS 'TableOwner' 
  3. AS 
  4. BEGIN 
  5. INSERT INTO TableOwnerSchema.MyTable(Field1)VALUES(8) 
  6. END 
  7. GO 

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

 
 
 
  1. GRANT EXEC ON usp_InsertMyTable TO BaseUser 
  2. GO 

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

 
 
 
  1. EXECUTE AS USER = 'BaseUser' 
  2. GO 
  3. EXEC usp_InsertMyTable 
  4. GO 

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

 
 
 
  1. REVERT 
  2. GO 
  3. ALTER PROCEDURE usp_InsertMyTable 
  4. AS 
  5. BEGIN 
  6. INSERT INTO TableOwnerSchema.MyTable(Field1)VALUES(8) 
  7. END 
  8. GO 
  9. EXECUTE AS USER = 'BaseUser' 
  10. GO 
  11. EXEC usp_InsertMyTable 
  12. GO 
  13. REVERT

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

本文题目:修改SQLServer2005执行环境实例演示
本文URL:http://www.shufengxianlan.com/qtweb/news40/18790.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联