web-dev-qa-db-ja.com

'NT AUTHORITY \ SYSTEM'にsysadmin権限を付与します

SQL Server 2012以降の場合 SQL Serverのインストールの新機能 の状態:

BUILTIN\administratorsおよびLocal SystemNT AUTHORITY\SYSTEM)は、sysadmin固定サーバーロールで自動的にプロビジョニングされません。

私の場合、これが問題になりました。Custom Action C++コードを使用してデータベースデータをセットアップする(データベース、ビュー、プロシージャ、データなどを作成する)WiXインストーラーがあります。 Custom ActionはユーザーNT AUTHORITY\SYSTEMとして実行されますが、このアカウントにはCREATE DATABASEスクリプトを実行する権限がありません。

  1. ソフトウェアのインストール中にNT AUTHORITY\SYSTEMsysadminの役割を与えることは正しいですか?それとももっと良い解決策がありますか?

  2. 正しい場合、NT AUTHORITY\SYSTEMの適切なユーザー名を見つけることは可能ですか?権限を変更するには、この名前が必要です*。ロケールによって、この名前は異なります(例:NT AUTHORITY\SYSTEMまたはNT AUTHORITY\СИСТЕМА)。


sysadminロールにNT AUTHORITY\SYSTEMを追加:

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_principalsname LIKE 'NT AUTHORITY\%'を検索すると、複数のNT AUTHORITY\...ユーザーが存在する場合があるため、機能しません。仮想マシンの1つでそのようなケースに遭遇しました。

6
mosg

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またはSystem.Security名前空間については MSDNの記事 を参照してください。

スタックオーバーフローのQ&Aにコンパクトな例があります 。evtファイルからのWinAPI LookupAccountSidRemy Lebea による:

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"";
}

信頼できるソースからソフトウェアをインストールするときに、SQL Server sysadminロールにNT AUTHORITY\SYSTEMを配置するときに問題はありますか?問題ないはずですが、誰が知っているのでしょう...

2
Serg