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

时间:2009-10-21 14:27:11

标签: sql sql-server database

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

6 个答案:

答案 0 :(得分:164)

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

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

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

以下是使用刚刚声明的 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

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

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

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

答案 1 :(得分:27)

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

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版本(在您的问题中包含此信息几乎总是非常有用)。

答案 2 :(得分: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)

答案 3 :(得分:4)

您可以使用:

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

创建登录信息(有关详细信息,请参阅here)。

然后你可能需要使用:

CREATE USER user_name 

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

(详见here

您也可以使用:

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

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

(详见here

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

答案 4 :(得分:0)

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

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

SQL Server登录错误18456 “用户登录失败...(Microsoft SQL Server,错误:18456)” 如果我在登录时键入了错误的密码,我习惯看到这个错误 - 但这只是在我使用混合模式(Windows和SQL身份验证)时。在这种情况下,服务器仅设置了Windows身份验证,用户帐户是我自己的。我还不确定为什么在安装过程中没有将我的用户添加到SYSADMIN角色;也许我错过了一步,忘记添加它。无论如何,并非所有希望都失去了。

如果您无法使用任何其他帐户登录到SQL Server,解决此问题的方法是通过命令行界面添加您的网络登录。为此,您需要成为Windows上的管理员,用于您登录的PC。

停止MSSQL服务。 使用“以管理员身份运行”打开命令提示符。 切换到包含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

  

从WINDOWS创建登录[domainName \ loginName]   2   走   3   SP_ADDSRVROLEMEMBER'LOGIN_NAME','SYSADMIN'   4   走   使用CTRL + C结束命令提示符窗口中的两个进程;系统将提示您按Y键结束SQL Server进程。

重新启动MSSQL服务。 而已!您现在应该可以使用网络登录进行登录。

答案 5 :(得分:0)

CREATE LOGIN AdminLOGIN WITH PASSWORD = 'pass'
GO


Use MyDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'AdminLOGIN')
BEGIN
    CREATE USER [AdminLOGIN] FOR LOGIN [AdminLOGIN]
    EXEC sp_addrolemember N'db_owner', N'AdminLOGIN'
    EXEC master..sp_addsrvrolemember @loginame = N'adminlogin', @rolename = N'sysadmin'
END;
GO

此功能完全可以帮助您使用以下网络:

1- Right-click on SQL Server instance at root of Object Explorer, click on Properties
Select Security from the left pane.

2- Select the SQL Server and Windows Authentication mode radio button, and click OK.

3- Right-click on the SQL Server instance, select Restart (alternatively, open up Services and restart the SQL Server service).

4- Close sql server application and reopen it

5- open 'SQL Server Configuration Manager' and tcp enabled for network

6-Double-click the TCP/IP protocol, go to the IP Addresses tab and scroll down to the IPAll section.

7-Specify the 1433 in the TCP Port field (or another port if 1433 is used by another MSSQL Server) and press the OK 

8-Open in Sql Server: Security And Login  And Right Click on Login Name And Select Peroperties And Select Server Roles And 
  Checked The Sysadmin And Bulkadmin then Ok.
9-firewall: Open cmd as administrator and type: 
      netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT