我正在使用一个包含的数据库,在创建数据库之后我试图创建一个用户,但是我收到了错误:
您只能在包含的数据库中创建具有密码的用户
我的代码是:
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
答案 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;
名称可以相同,但当然也可以不同。