【问题标题】:SQL SERVER changing security contex inside of stored procedureSQL SERVER 更改存储过程内部的安全上下文
【发布时间】:2011-09-13 10:54:57
【问题描述】:

在一些存储过程中,我必须将安全上下文更改为更强大的登录。 我尝试过这样的事情:

USE ProjectsDB
EXECUTE AS login = 'sa'

--SOME OPERATIONS

REVERT;

但我收到以下错误消息:

Msg 15406, Level 16, State 1, Line 3
Cannot execute as the server principal because the principal "sa" does not exist,
this type of principal cannot be impersonated, or you do not have permission.

“sa”登录具有所有需要的权限。 可能是什么问题?

伊兰。

【问题讨论】:

    标签: sql-server sql-server-2005 sql-server-2008 stored-procedures


    【解决方案1】:

    您需要拥有“IMPERSONATE”权限才能执行此操作。查看GRANT IMPERSONATE 声明。

    除此之外,我认为在 sql server 中执行此操作(而不是将权限级别提高到 SA)的最佳方法是:

    • 创建证书
    • 使用证书对存储过程进行签名
    • 从证书中删除私钥
    • 从证书创建用户
    • 向用户授予所需的权限

    如果您需要“服务器范围的权限”,则可选:

    • 将证书导出到磁盘
    • 在 master 数据库中导入证书
    • 从证书创建登录
    • 授予适当的登录权限

    如果您需要“跨数据库权限”,则更多可选

    • 在要授予权限的数据库中导入证书
    • 从证书创建用户。
    • 向用户授予正确的权限

    SQL Server 将通过证书将所有用户/登录权限链接在一起,当您执行签名过程时,它将使用与证书链接的用户的权限。

    【讨论】:

    • @Flip 哇!!!!!!!!!!!!你能推荐一些涵盖所有这些的书(电子书)吗? :)
    • Erland Sommarskog 拥有最好的信息(和往常一样)sommarskog.se/grantperm.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多