web-dev-qa-db-ja.com

含まれているデータベースでは、パスワードを持つユーザーのみを作成できます

包含データベースを使用しています。データベースを作成した後、ユーザーを作成しようとしましたが、エラーが発生しました。

含まれているデータベースでは、パスワードを持つユーザーのみを作成できます

私のコードは:

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
22
Faisal Ashfaq

現在のデータベースは[マスター]だと思いますが、[MyDb]を使用する必要があります

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

SQL Server 2017で、最初のセットアップで「包含データベース」機能がこれを支援するように構成されていないことがわかりました。

したがって、サーバーレベルでは、UIでサーバープロパティを確認するか、次のコマンドを実行できます。

EXEC sp_configure 'CONTAINED DATABASE AUTHENTICATION'

実行値が1でない場合:

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

データベースレベルでは、「包含データベース」機能が完全に有効になっていない場合もあります。このオプションは、[オプション]セクションのデータベースプロパティパネルの上部にある4番目のドロップダウンにあります...

包含タイプ==なしまたは部分的

SQL経由でも設定できます。例えば:

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

その後、 @ aleksandr の提案に従って、包含ユーザーを作成できます。

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

ログインとユーザーを別々に作成します。

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

名前は同じでもかまいませんが、異なる場合もあります。

20
Alpi Murányi