Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于创建新用户的SQL Server脚本_Sql_Sql Server_Database - Fatal编程技术网

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

用于创建新用户的SQL Server脚本,sql,sql-server,database,Sql,Sql Server,Database,我想编写一个脚本,在SQL Server Express中创建一个admin用户(使用abcd密码)。 我还想分配此用户的管理员完全权限。您可以使用: CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 要创建与特定数据库的登录名关联的用户,也要授予他们访问权限 (详情请参阅) 您还可以使用: GRANT permission [ ,...n ] ON SCHEMA :: schema_name

我想编写一个脚本,在SQL Server Express中创建一个
admin
用户(使用
abcd
密码)。 我还想分配此用户的
管理员
完全权限。

您可以使用:

CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 
要创建与特定数据库的登录名关联的用户,也要授予他们访问权限

(详情请参阅)

您还可以使用:

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name
为分配给用户的架构设置权限

(详情请参阅)


您可能会发现另外两个有用的命令是and。

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

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

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO
以下是如何使用刚才声明的登录名创建具有db_所有者权限的用户:

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登录),并创建如上所示的登录。然后,您将根据应用程序所需的内容“授予”该SQL登录的权限。有关更多信息,请参阅


更新: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的版本,您可能需要省去检查参数(在问题中包含此信息几乎总是很有用的)。

如果要创建通用脚本,可以使用带有替换用户名和数据库名的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)

上周,我在我的dev box上安装了Microsoft SQL Server 2014 Developer Edition,并立即遇到了一个我以前从未见过的问题

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

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

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

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

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

重新启动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

我无意中对这个答案投了反对票,但现在我无法在不进行编辑的情况下撤消我的反对票。我把垃圾文本只是为了删除我的否决票,但现在我既不能删除垃圾文本也不能删除否决票。。。很抱歉,这正是我想要的,我正在尝试使用Microsoft.SqlServer.Management.Smo.login类用c#创建登录名。但我无法创造。这适用于c语言中的简单代码#谢谢这正是我所需要的,谢谢。我没想到它会这么容易——而且它能完美地工作!!
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