mos*_*osg 6 sql-server scripting sql-server-2012
对于 SQL Server 2012 及更高版本,如SQL Server 安装中的新增功能所述:
BUILTIN\administrators和本地系统( NT AUTHORITY\SYSTEM ) 不会在 sysadmin 固定服务器角色中自动配置。
就我而言,这已经成为一个问题:我有一个 WiX 安装程序,它使用Custom Action
C++ 代码来设置数据库数据(创建数据库、视图、过程、数据等)。Custom Action
以 user 身份运行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'
Run Code Online (Sandbox Code Playgroud)
搜索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
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\SYSTEM
SQL Server角色是否存在任何问题?sysadmin
我希望应该没有问题,但谁知道呢......
归档时间: |
|
查看次数: |
14033 次 |
最近记录: |