在不同的文化中设置MS SQL登录角色

时间:2018-02-12 11:05:01

标签: sql-server powershell culture

我正在尝试创建一个PowerShell脚本,允许我为不同文化中的登录设置服务器角色。

更具体地说,我想将 sysadmin 角色授予登录 NT AUTHORITY\SYSTEM NT AUTHORITY\NETWORK SERVICE 。到目前为止,我已经使用SQL脚本完成了这项工作。但是,我发现这个脚本不适用于德语Windows安装,因为这两个登录名为 NT-AUTORITÄT\SYSTEM NT-AUTORITÄT\Netzwerkdienst 分别在那里。

我已经发现这些登录的SID分别为 S-1-5-18 S-1-5-20 ,但我不知道我是怎么做的我可以利用这个优势。

这是我到目前为止使用的SQL脚本:

PRINT 'Granting sysadmin role to 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'

PRINT 'Granting sysadmin role to NT AUTHORITY\NETWORK SERVICE...'

IF NOT EXISTS
(
    SELECT name
    FROM master.sys.server_principals 
    WHERE IS_SRVROLEMEMBER ('sysadmin', name) = 1 
    AND name LIKE 'NT AUTHORITY\NETWORK SERVICE'
)
EXEC master..sp_addsrvrolemember
    @loginame = N'NT AUTHORITY\NETWORK SERVICE', @rolename = N'sysadmin'

如上所述,存在的问题是它不适用于除英语之外的其他文化。我已经尝试使用SQLPS和SqlServer为此创建PowerShell脚本,但在那里没有取得多大进展。

有人可以帮我这个吗?

提前致谢, Kira Resari

1 个答案:

答案 0 :(得分:0)

使用Jeroen Mostert的评论,我能够拼凑出以下解决方案,该解决方案现在适用于Windows的英语和德语安装。我很确定它也适用于其他文化:

DECLARE @user_name_nt_authority_system NVARCHAR(MAX)
DECLARE @user_name_nt_authority_network_service NVARCHAR(MAX)

SET @user_name_nt_authority_system = SUSER_SNAME(0x010100000000000512000000)
SET @user_name_nt_authority_network_service = SUSER_SNAME(0x010100000000000514000000)

PRINT 'Granting sysadmin role to NT AUTHORITY\SYSTEM...'

IF NOT EXISTS
(
    SELECT name
    FROM master.sys.server_principals 
    WHERE IS_SRVROLEMEMBER ('sysadmin', name) = 1 
    AND name LIKE @user_name_nt_authority_system 
)
EXEC master..sp_addsrvrolemember
    @loginame = @user_name_nt_authority_system, @rolename = N'sysadmin'

PRINT 'Granting sysadmin role to NT AUTHORITY\NETWORK SERVICE...'

IF NOT EXISTS
(
    SELECT name
    FROM master.sys.server_principals 
    WHERE IS_SRVROLEMEMBER ('sysadmin', name) = 1 
    AND name LIKE @user_name_nt_authority_network_service
)
EXEC master..sp_addsrvrolemember
    @loginame = @user_name_nt_authority_network_service, @rolename = N'sysadmin'