Aus*_*pex 0 sql-server sql-server-2012
我正在运行 SQL Server 2012(我知道,古老的......)并试图找出为什么用户没有执行某些过程的权限。
我以 登录sa,以防万一我自己的 id 没有足够的权限来冒充。
当我尝试时:
EXECUTE AS LOGIN = 'MBA\SAHFOS_GRP'
Run Code Online (Sandbox Code Playgroud)
我收到消息:
Cannot execute as the server principal because the principal "MBA\SAHFOS_GRP" does not exist, this type of principal cannot be impersonated, or you do not have permission.
Run Code Online (Sandbox Code Playgroud)
据我所知,它满足要求:
select * from sys.server_principals where name = 'MBA\SAHFOS_GRP'
name principal_id sid type type_desc is_disabled create_date modify_date default_database_name default_language_name credential_id owning_principal_id is_fixed_role
MBA\SAHFOS_GRP 413 0x0105000000000005150000007CEB240DCD7C4166235F636BC8040000 G WINDOWS_GROUP 0 2017-12-01 10:00:45.050 2017-12-01 10:00:45.057 cpr_prod us_english NULL NULL 0
Run Code Online (Sandbox Code Playgroud)
我是sa,所以我肯定得到了许可。它存在。只剩下“不能被冒充”。为什么不能冒充呢?
设计不支持这一点。
参考:EXECUTE AS 子句 (Transact-SQL)
指定模块内的语句在 user_name 中指定的用户的上下文中执行。模块内任何对象的权限都会根据 user_name 进行验证。不能为具有服务器作用域的 DDL 触发器或登录触发器指定 user_name。请改用登录名。
user_name 必须存在于当前数据库中,并且必须是单例帐户。user_name 不能是组、角色、证书、密钥或内置帐户,例如 NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService 或 NT AUTHORITY\LocalSystem。
您可以使用一些解决方法。