创建新用户的SQL Server脚本


Answers:


198

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

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

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管理员帐户创建一个登录帐户(在大多数SQL Server安装中)。在大多数情况下,我只是在管理数据库时使用它(它具有所有特权)。

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

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


1
正是我所需要的,谢谢。我没想到它会这么简单-并能完美运行!!
戴夫

33

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

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


正是我想要的,我正在尝试使用Microsoft.SqlServer.Management.Smo.Login类使用c#创建登录名。但我无法创建。这可以用C#中的简单代码工作
kordiseps '18

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)

我无意中否决了这个答案,但是现在我不能不编辑就撤消我的否决。我已经添加了垃圾文本只是为了删除我的
否决票,

4

您可以使用:

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

创建登录名(更多信息,请参见此处)。

然后,您可能需要使用:

CREATE USER user_name 

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

(有关详细信息,请参见此处

您还可以使用:

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

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

(有关详细信息,请参见此处

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


2
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

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 GO 3 SP_ADDSRVROLEMEMBER'LOGIN_NAME','SYSADMIN'4 GO使用CTRL + C结束命令提示符窗口中的两个进程;系统将提示您按Y结束SQL Server进程。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.