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

Fai*_*faq 20 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
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
CREATE USER MyUser
WITH PASSWORD = 'pass@123';
GO
Run Code Online (Sandbox Code Playgroud)

小智 23

SQL Server 2017中,我发现我的初始设置没有配置"包含数据库"功能来帮助实现这一目标.

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

EXEC sp_configure 'CONTAINED DATABASE AUTHENTICATION'
Run Code Online (Sandbox Code Playgroud)

如果运行值不是1,则:

EXEC sp_configure 'CONTAINED DATABASE AUTHENTICATION', 1
GO
RECONFIGURE
GO
Run Code Online (Sandbox Code Playgroud)

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

遏制类型==无或部分

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

USE [master]
GO
ALTER DATABASE [MyDb] SET CONTAINMENT = PARTIAL
GO
Run Code Online (Sandbox Code Playgroud)

之后,您可以按照@aleksandr的建议创建包含的用户

USE [MyDb]
GO
CREATE USER MyUser WITH PASSWORD = 'pass@123';
GO
Run Code Online (Sandbox Code Playgroud)

  • 使用 MS SQL 2019。要在 Server Management Studio 中查找“包含类型”,请右键单击数据库名称 -> 属性 -> 选项 (3认同)

Alp*_*nyi 17

分别创建登录名和用户:

CREATE LOGIN MyUser WITH PASSWORD = 'pass@123';
CREATE USER MyUser FOR LOGIN MyUser;  
Run Code Online (Sandbox Code Playgroud)

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

  • 问题是关于包含的数据库用户,因此虽然这个答案可能对某些人有用,但对于包含的数据库来说是不正确的,因为它不使用基于登录的用户。 (8认同)

Ale*_*nko 6

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

USE [MyDb]
GO
CREATE USER MyUser
WITH PASSWORD = 'pass@123';
GO
Run Code Online (Sandbox Code Playgroud)

  • 在 MSSQL 服务器 2017 上不起作用。仍然说同样的错误。 (5认同)