用于创建新用户的SQL Server脚本

Ash*_*shu 87 sql database sql-server

我想编写一个脚本来在SQL Server Express中创建admin用户(带abcd密码).另外,我想为此用户分配admin完整权限.

Mar*_*ham 181

根据您的问题,我认为您可能对用户登录之间的区别感到困惑.一个登录的是SQL Server作为一个整体上的账户-有人谁是能够登录到服务器,谁拥有一个密码.一个用户是一个登录访问到特定的数据库.

创建登录很简单,必须(显然)在为特定数据库中的登录创建用户帐户之前完成:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO
Run Code Online (Sandbox Code Playgroud)

以下是使用刚才声明的Login创建具有db_owner权限的用户的方法:

Use YourDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName')
BEGIN
    CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]
    EXEC sp_addrolemember N'db_owner', N'NewAdminName'
END;
GO
Run Code Online (Sandbox Code Playgroud)

现在,登录比我看起来更加流畅.例如,安装数据库时,将自动为Windows Administrator帐户创建登录帐户(在大多数SQL Server安装中).在大多数情况下,我只是在管理数据库时使用它(它具有所有权限).

但是,如果要从应用程序访问SQL Server,则需要将服务器设置为"混合模式"(Windows和SQL登录)并创建登录,如上所示.然后,您将根据应用程序所需的内容"授予"SQL登录权限.有关更多信息,请参见此处

更新:Aaron指出使用sp_addsrvrolemember为您的登录帐户分配一个准备好的角色.这是一个好主意 - 比手动授予权限更快更容易.如果你google它,你会看到很多链接.但是,您仍必须了解登录和用户之间的区别.

  • 正是我所需要的,谢谢。我没想到它会如此简单 - 并且它能完美地工作! (2认同)

Aar*_*and 29

整个服务器或特定数据库的完全管理员权限?我认为其他人回答了数据库,但对于服务器:

USE [master];
GO
CREATE LOGIN MyNewAdminUser 
    WITH PASSWORD    = N'abcd',
    CHECK_POLICY     = OFF,
    CHECK_EXPIRATION = OFF;
GO
EXEC sp_addsrvrolemember 
    @loginame = N'MyNewAdminUser', 
    @rolename = N'sysadmin';
Run Code Online (Sandbox Code Playgroud)

您可能需要取消CHECK_参数,具体取决于您使用的SQL Server Express版本(在您的问题中包含此信息几乎总是有用的).


Sim*_*ens 6

您可以使用:

CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 
Run Code Online (Sandbox Code Playgroud)

创建登录(请参阅此处了解更多详细信息)。

那么你可能需要使用:

CREATE USER user_name 
Run Code Online (Sandbox Code Playgroud)

要创建与特定数据库的登录名关联的用户,您也希望授予他们访问权限。

(详情请看这里

您还可以使用:

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name
Run Code Online (Sandbox Code Playgroud)

为您分配给用户的架构设置权限。

(详情请看这里

您可能会发现有用的另外两个命令是ALTER USERALTER LOGIN


Gui*_*ish 6

如果要创建通用脚本,可以使用带有用户名和数据库名称替换的Execute语句来创建它

Declare @userName as varchar(50); 
Declare @defaultDataBaseName as varchar(50);
Declare @LoginCreationScript as varchar(max);
Declare @UserCreationScript as varchar(max);
Declare @TempUserCreationScript as varchar(max);
set @defaultDataBaseName = 'data1';
set @userName = 'domain\userName';
set @LoginCreationScript ='CREATE LOGIN [{userName}]
FROM WINDOWS 
WITH DEFAULT_DATABASE ={dataBaseName}'

set @UserCreationScript ='
USE {dataBaseName}
CREATE User [{userName}] for LOGIN [{userName}];
EXEC sp_addrolemember ''db_datareader'', ''{userName}'';
EXEC sp_addrolemember ''db_datawriter'', ''{userName}'';
Grant Execute on Schema :: dbo TO [{userName}];'
/*Login creation*/
set @LoginCreationScript=Replace(Replace(@LoginCreationScript, '{userName}', @userName), '{dataBaseName}', @defaultDataBaseName)
set @UserCreationScript =Replace(@UserCreationScript, '{userName}', @userName)
Execute(@LoginCreationScript)

/*User creation and role assignment*/
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', @defaultDataBaseName)
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db2')
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db3')
Execute(@TempUserCreationScript)
Run Code Online (Sandbox Code Playgroud)