修改SQL Server 2005执行环境实例演示

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

在这个例子中,您会看到如何使用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=OFFCHECK_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=OFFCHECK_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. (   
  3. Field1 INT   
  4. )   
  5. 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并没有可以指定的权限。您可以将权限赋予将要进行截取表格操作的用户,然后在操作结束的时候再将原有的权限设定恢复就可以了。

【编辑推荐】

  1. SQL Server选择索引之查询VS 的性能修改
  2. SQL Server非聚集索引概述
  3. 用SQL Server索引密度对行数进行评估
  4. 关于SQL Server索引密度的知识
  5. SQL Server索引直方图的内容描述

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/232908.html<

(0)
运维的头像运维
上一篇2025-04-20 09:24
下一篇 2025-04-20 09:25

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注