创建新用户的 SQLServer 脚本

我想写一个脚本创建一个 admin用户(使用 abcd密码)在 SQL Server Express。 Also I want to assign this user admin full rights.

269329 次浏览

你可使用:

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

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

那么你可能需要使用:

CREATE USER user_name

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

(详情见 给你)

你亦可使用:

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

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

(See 给你 for details)

另外两个有用的命令是 ALTER USERALTER LOGIN

基于你的问题,我想你可能对 用户登陆之间的区别有点困惑。登陆是整个 SQLServer 上的帐户——能够登录到服务器并且有密码的人。用户是能够访问特定数据库的 登陆

Creating a 登陆 is easy and must (obviously) be done before creating a 用户 account for the login in a specific database:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

下面是如何使用刚才声明的 登陆创建具有 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 管理员帐户创建登录帐户(在大多数 SQLServer 安装中)。在大多数情况下,我只是在管理数据库时使用它(它具有所有特权)。

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

更新: Aaron 指出使用 sp _ addsrvrolemember 为登录帐户分配准备好的角色。这是一个好主意——比手动授予特权更快、更容易。如果你谷歌它,你会看到大量的链接。但是,您仍然必须理解登录和用户之间的区别。

整个服务器或特定数据库的完全管理权限?我认为其他人的答案是数据库,而不是服务器:

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

你可能需要根据你所使用的 SQL Server Express 的不同版本去掉 CHECK _ properties (在你的问题中包含这些信息几乎是 一直都是的有用之处)。

如果要创建一个通用脚本,可以使用 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)

在过去的一周里,我在我的开发 Microsoft SQL Server 上安装了2014版本的开发者版本,并且立即遇到了一个我从来没有见过的问题。

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

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

如果无法使用任何其他帐户登录到 SQLServer,那么解决这个问题的方法是通过命令行界面添加网络登录名。为了实现这一点,您需要成为登录的 PC 的 Windows 管理员。

停止 MSSQL 服务。 使用“以管理员身份运行”打开命令提示符。 Change to the folder that holds the SQL Server EXE file; the default for SQL Server 2014 is “C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn”. 运行以下命令: “ sqlservr.exe-m”。 While leaving this Command Prompt open, open another one, repeating steps 2 and 3. 在第二个命令提示符窗口中,运行“ SQLCMD-S Server _ Name Instance _ Name” 在此窗口中,运行以下行,每行后按 Enter: 1

从 WINDOWS 创建 LOGIN [ domainName loginName ] 2 去吧 3 SP _ ADDSRVROLEMBER‘ LOGIN _ NAME’,‘ SYSADMIN’ 4 去吧 使用 CTRL + C 结束命令提示符窗口中的两个进程; 系统将提示您按 Y 结束 SQLServer 进程。

重新启动 MSSQL 服务。 就是这样! 您现在应该能够使用您的网络登录登录。

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