【问题标题】:Run t-SQL command using another user and password使用另一个用户和密码运行 t-SQL 命令
【发布时间】:2014-11-17 21:41:11
【问题描述】:

T-SQL 问题: 我的用户不是管理员,但我只想使用我的 sa 用户和当前用户的密码运行查询。

解释:

我的当前用户

USER: [shashank] -- 这不是管理员用户

我的管理员

用户:sa

通过:12345

我以[shashank] 的身份登录,并且想在不登录[sa] 的情况下运行一些管理查询。

EXECUTE AS 似乎对我不起作用,因为它必须是 sysadmin 并且不需要密码。

提前致谢。

【问题讨论】:

  • 您对EXECUTE AS 为何不适合您的解释不清楚。我就是这样做的……
  • 请清楚解释为什么“执行为”不起作用。
  • EXECUTE AS 按照 MSDN 网址link 我只能输入管理员用户名,如何在这种语法中输入密码?如果可能的话,你能分享一下确切的查询吗?
  • 关于为什么EXECUTE AS 不起作用,这个问题可能会更清楚一些,但我认为它不值得投反对票。这是一个简洁的编程问题,OP 在来到 StackOverflow 之前已经努力尝试解决这个问题。
  • 您无需使用EXECUTE AS 指定密码。您授予用户运行 Proc 或函数的权限,然后它就可以工作了。 Please see the documentation.

标签: sql sql-server sql-server-2008


【解决方案1】:

这里有两个选项:

  1. EXECUTE AS 封装在只有您的用户拥有执行权限的存储过程中。

    CREATE PROCEDURE dbo.DoSomething
    AS
    SET NOCOUNT ON;
    
    EXECUTE AS LOGIN = 'sa';
    
    -- do stuff
    
    REVERT;
    
  2. 通过签署存储过程来管理提升的权限,同样,只有您的用户拥有 EXECUTE 权限,并带有证书。看看这里的这个答案,听起来几乎是一模一样的场景(答案不使用EXECUTE AS):

    SQL Server: EXECUTE AS clause of stored procedure not granting sysadmin permissions

    采用签名存储过程路由的三个好处是:

    1. 您不必担心IMPERSONATE 权限
    2. 您不必处理冒充的后果,这可能会发挥作用,具体取决于冒充“sa”时正在执行的操作。
    3. 您甚至可能不需要完整的“系统管理员”凭据。根据您正在执行的操作,您可能能够避免分配更多限制性角色和/或权限,以避免增加允许执行任何操作的代码的安全风险任何事情.

【讨论】:

  • 我无法向当前用户提供运行 EXECUTE AS 命令的权限。所以我想如果有任何替代解决方案来运行管理员查询,只要我有管理员用户名和密码。
  • @Shashank:你看过这个答案的“或”部分吗?其他 S.O. 的链接问题涉及签署 proc,不需要 EXECUTE AS。
猜你喜欢
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多