无法使用 Windows (Active Directory) 组登录作为服务器主体执行...

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,所以我肯定得到了许可。它存在。只剩下“不能被冒充”。为什么不能冒充呢?

Sql*_*ide 5

设计不支持这一点。

参考:EXECUTE AS 子句 (Transact-SQL)

指定模块内的语句在 user_name 中指定的用户的上下文中执行。模块内任何对象的权限都会根据 user_name 进行验证。不能为具有服务器作用域的 DDL 触发器或登录触发器指定 user_name。请改用登录名。

user_name 必须存在于当前数据库中,并且必须是单例帐户。user_name 不能是组、角色、证书、密钥或内置帐户,例如 NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService 或 NT AUTHORITY\LocalSystem。

您可以使用一些解决方法。