Sql-Server

無法作為伺服器主體執行…使用 Windows (Active Directory) 組登錄

  • May 6, 2022

我正在執行 SQL Server 2012(我知道,古老的……)並試圖找出使用者無權執行某些程序的原因。

我以 身份登錄sa,以防我自己的 id 沒有足夠的權限來冒充。

當我嘗試:

EXECUTE AS LOGIN = 'MBA\SAHFOS_GRP'

我收到消息:

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.

據我所知,它符合要求:

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

我是sa,所以我肯定有許可。它存在。這只留下“不能被模仿”。為什麼不能被模仿?

這不受設計支持。

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

指定模組內的語句在 user_name 中指定的使用者的上下文中執行。模組內任何對象的權限都根據 user_name 進行驗證。不能為具有伺服器作用域或登錄觸發器的 DDL 觸發器指定 user_name。請改用 login_name。

user_name 必須存在於目前數據庫中,並且必須是單例帳戶。user_name 不能是組、角色、證書、密鑰或內置帳戶,例如 NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService 或 NT AUTHORITY\LocalSystem。

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

引用自:https://dba.stackexchange.com/questions/311781