Sql-Server
將系統管理員權限授予“NT AUTHORITYSYSTEM”
對於 SQL Server 2012 及更高版本,如SQL Server 安裝中的新增功能所述:
BUILTIN\administrators和本地系統( NT AUTHORITY\SYSTEM ) 不會自動配置為 sysadmin 固定伺服器角色。
就我而言,這已成為一個問題:我有一個 WiX 安裝程序,它使用
Custom Action
C++ 程式碼設置數據庫數據(創建數據庫、視圖、過程、數據等)。Custom Action
以使用者身份執行NT AUTHORITY\SYSTEM
,但此帳戶無權執行CREATE DATABASE
腳本。
- 在安裝軟體時賦予
sysadmin
角色是否正確?NT AUTHORITY\SYSTEM
或者也許有更好的解決方案?- 如果正確,是否可以找到正確的使用者名
NT AUTHORITY\SYSTEM
?我需要此名稱才能更改權限*。在不同的語言環境中,此名稱是不同的,例如,NT AUTHORITY\SYSTEM
或NT AUTHORITY\СИСТЕМА
。添加
NT AUTHORITY\SYSTEM
到sysadmin
角色:IF NOT EXISTS ( SELECT name FROM master.sys.server_principals WHERE IS_SRVROLEMEMBER ('sysadmin', name) = 1 AND name LIKE 'NT AUTHORITY\SYSTEM' ) EXEC master..sp_addsrvrolemember @loginame = N'NT AUTHORITY\SYSTEM', @rolename = N'sysadmin'
搜尋
sys.server_principals
將name LIKE 'NT AUTHORITY\%'
不起作用,因為有時會有多個NT AUTHORITY\...
使用者。我在我的一台虛擬機上遇到過這樣的情況。
您可以使用 PowerShell 腳本獲取知名安全標識符(SID) 的名稱:
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-18") $objUser = $objSID.Translate( [System.Security.Principal.NTAccount]) $objUser.Value
就我個人而言,我從來不必從 C/C++ 程式碼中執行此操作。請參閱有關託管程式碼的 WINAPI 或命名空間的MSDN 文章。
System.Security
在Remy Lebeau的 .evt 文件的 Stack Overflow Q & A WinAPI LookupAccountSid中有一個簡潔的例子:
static const DWORD MAX_BUFF_SIZE = 256; wstring userNameFromSid(SID userSid, wstring computerName) { wchar_t buffName[MAX_BUFF_SIZE]; DWORD buffNameSize = MAX_BUFF_SIZE; wchar_t buffDomain[MAX_BUFF_SIZE]; DWORD buffDomainSize = MAX_BUFF_SIZE; SID_NAME_USE SidType; if (LookupAccountSid(!computerName.empty() ? computerName.c_str() : NULL, &userSid, buffName, &buffNameSize, buffDomain, &buffDomainSize, &SidType)) { return buffName; } /*Here some code to print error in a Message box*/ return L""; }
從可靠來源安裝軟體時,放置
NT AUTHORITY\SYSTEM
SQL Server角色是否有任何問題?sysadmin
應該沒有問題,我希望,但誰知道…