向“NT AUTHORITY\SYSTEM”授予系统管理员权限

mos*_*osg 6 sql-server scripting sql-server-2012

对于 SQL Server 2012 及更高版本,如SQL Server 安装中的新增功能所述:

BUILTIN\administrators本地系统( NT AUTHORITY\SYSTEM ) 不会在 sysadmin 固定服务器角色中自动配置。

就我而言,这已经成为一个问题:我有一个 WiX 安装程序,它使用Custom ActionC++ 代码来设置数据库数据(创建数据库、视图、过程、数据等)。Custom Action以 user 身份运行NT AUTHORITY\SYSTEM,但此帐户没有执行CREATE DATABASE脚本的权限。

  1. 安装软件时赋予sysadmin角色是否正确NT AUTHORITY\SYSTEM?或者也许有更好的解决方案?

  2. 如果正确,是否可以找到正确的用户名NT AUTHORITY\SYSTEM?我需要这个名字才能更改权限*。在不同的语言环境中,此名称是不同的,例如,NT AUTHORITY\SYSTEMNT AUTHORITY\???????


添加NT AUTHORITY\SYSTEMsysadmin角色:

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'
Run Code Online (Sandbox Code Playgroud)

搜索sys.server_principalsname LIKE 'NT AUTHORITY\%'不起作用,因为有时会出现一个以上的NT AUTHORITY\...用户。我在我的一台虚拟机上遇到过这样的情况。

Ser*_*erg 3

您可以使用 PowerShell 脚本获取众所周知的安全标识符(SID)的名称:

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-18")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value
Run Code Online (Sandbox Code Playgroud)

就我个人而言,我从来不需要通过 C/C++ 代码执行此操作。请参阅有关托管代码的WINAPI 或命名空间的MSDN 文章。System.Security

Remy Lebeau的Stack Overflow Q & A WinAPI LookupAccountSid 中有一个来自 .evt 文件的紧凑示例:

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"";
}
Run Code Online (Sandbox Code Playgroud)

从可靠来源安装软件时,NT AUTHORITY\SYSTEMSQL Server角色是否存在任何问题?sysadmin我希望应该没有问题,但谁知道呢......