科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何修改SQL Server 2005的执行环境

如何修改SQL Server 2005的执行环境

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SQL Server 2005包含了EXECUTE AS语句,通过使用EXECUTE AS语句,您可以为批处理和过程转换执行环境,这样,调用该批处理或过程的用户就可以使用不同的权限来操作了。

作者:赛迪网 191831 来源:天新网 2008年3月25日

关键字: 数据库 Mssql SQL 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并没有可以指定的权限。你可以将权限赋予将要进行截取表格操作的用户,最后在操作结束时再将原有的权限设定恢复即可。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章