您只能在包含的数据库中创建具有密码的用户

时间:2013-11-17 12:23:03

标签: sql sql-server sql-server-2012

我正在使用一个包含的数据库,在创建数据库之后我试图创建一个用户,但是我收到了错误:

  

您只能在包含的数据库中创建具有密码的用户

我的代码是:

sp_configure 'show advanced options',1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure 'contained database authentication', 1
GO
RECONFIGURE WITH OVERRIDE
GO
CREATE DATABASE [MyDb]
CONTAINMENT = PARTIAL
ON PRIMARY
( NAME = N'My', FILENAME = N'C:\My.mdf')
LOG ON
( NAME = N'My_log', FILENAME =N'C:\My_log.ldf')
CREATE USER MyUser
WITH PASSWORD = 'pass@123';
GO

3 个答案:

答案 0 :(得分:18)

SQL Server 2017 中,我发现我的初始设置未配置“包含数据库”功能来帮助实现这一目标。

因此,在服务器级别,您可以在UI中检查服务器属性或运行:

EXEC sp_configure 'CONTAINED DATABASE AUTHENTICATION'

如果运行值不为1,则:

EXEC sp_configure 'CONTAINED DATABASE AUTHENTICATION', 1
GO
RECONFIGURE
GO

在数据库级别,它也可能没有完全启用“包含数据库”功能。该选项位于“选项”部分的“数据库属性”面板中,位于顶部的第四个下拉列表中。

  

包含类型==无或部分

您也可以通过SQL进行设置。例如:

USE [master]
GO
ALTER DATABASE [MyDb] SET CONTAINMENT = PARTIAL
GO

此后,您可以按照@aleksandr

的建议创建包含的用户
USE [MyDb]
GO
CREATE USER MyUser WITH PASSWORD = 'pass@123';
GO

答案 1 :(得分:4)

我认为您当前的数据库是[master],但您必须使用[MyDb]

USE [MyDb]
GO
CREATE USER MyUser
WITH PASSWORD = 'pass@123';
GO

答案 2 :(得分:2)

分别创建登录名和用户:

CREATE LOGIN MyUser WITH PASSWORD = 'pass@123';
CREATE USER MyUser FOR LOGIN MyUser;  

名称可以相同,但当然也可以不同。