SQL Server脚本来创build一个新的用户

我想编写一个脚本来在SQL Server Express中创build一个admin用户(使用abcd密码)。 另外我想分配这个用户(pipe理员)完整的权利

基于你的问题,我认为你可能会对用户login的区别感到困惑。 login是作为一个整体的SQL Server上的帐户 – 能够login到服务器和谁有密码的人。 用户是可以访问特定数据库的login

创buildlogin很简单,必须(明显)在为特定数据库中的login创build用户帐户之前完成:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD' GO 

以下是如何使用刚刚声明的Login创build具有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 

现在, login比上面显得更加stream畅。 例如,安装数据库时,将自动为Windowspipe理员帐户创build一个login帐户(在大多数SQL Server安装中)。 在大多数情况下,当我正在pipe理一个数据库(它拥有所有权限)时,我只是使用它。

但是,如果要从应用程序访问SQL Server,则需要将服务器设置为“混合模式”(包括Windows和SQLlogin)并创build如上所示的Login。 然后,您将根据您的应用程序需要“授予”该SQLlogin的特权。 在这里看到更多的信息。

更新:亚伦指出使用sp_addsrvrolemember指派一个准备好的angular色到您的login帐户。 这是一个好主意 – 比手动授予权限更快更简单。 如果你谷歌,你会看到很多链接。 但是,您仍然必须了解login和用户之间的区别。

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

 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'; 

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

如果你想创build一个通用的脚本,你可以用Execute语句来replace你的用户名和数据库名

 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) 

您可以使用:

 CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 

创buildlogin(请参阅此处了解更多详情)。

那么你可能需要使用:

 CREATE USER user_name 

要创build与特定数据库的login相关联的用户,您也要授予他们访问权限。

(详情请看这里 )

你也可以使用:

 GRANT permission [ ,...n ] ON SCHEMA :: schema_name 

为您分配用户的模式设置权限。

(详情请看这里 )

您可能会发现其他两个有用的命令是ALTER USER和ALTER LOGIN 。

过去一周,我在开发箱上安装了Microsoft SQL Server 2014 Developer Edition,并立即遇到了一个我从未见过的问题。

我已经安装了各种版本的SQL Server无数次,通常是一个无痛的过程。 安装服务器,运行pipe理控制台,就这么简单。 但是,在完成这个安装之后,当我尝试使用SSMSlogin到服务器时,出现如下所示的错误:

SQL Serverlogin错误18456“login失败的用户…”(Microsoft SQL Server,错误:18456)“我习惯看到这个错误,如果我login时input错误的密码 – 但这只是如果我使用混合模式Windows和SQL身份validation)。 在这种情况下,服务器只设置了Windows身份validation,而用户帐户是我自己的。 我仍然不确定为什么在安装过程中没有将用户添加到SYSADMINangular色中; 也许我错过了一个步骤,忘了添加它。 无论如何,并不是所有的希望都失去了。

解决这个问题的方法是,如果你不能使用任何其他帐户login到SQL Server,则通过命令行界面添加networkinglogin。 为此,您需要成为Windows上的pipe理员,才能login到您的PC。

停止MSSQL服务。 使用以pipe理员身份运行打开命令提示符。 转到包含SQL Server EXE文件的文件夹; SQL Server 2014的默认值是“C:\ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn”。 运行以下命令:“sqlservr.exe -m”。 这将以单用户模式启动SQL Server。 在保持此命令提示符处于打开状态的同时,打开另一个,重复步骤2和3.在第二个命令提示符窗口中,运行“SQLCMD -S Server_Name \ Instance_Name”在此窗口中,运行以下命令行,并在每个命令之后按Enter键:1

CREATE LOGIN [domainName \ loginName] FROM WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER'LOGIN_NAME','SYSADMIN'4 GO使用CTRL + C结束命令提示符窗口中的两个进程; 您将被提示按Y来结束SQL Server进程。

重新启动MSSQL服务。 而已! 您现在应该能够使用您的networkingloginlogin。