特定の SQL ログインへのアクセスを完全にブロックしたいのですが、接続プロパティでデータベースが指定されている場合、サーバーは引き続き資格情報を受け入れます。
使用されたスクリプトは次のとおりです。
-- Master
CREATE LOGIN pmp
WITH PASSWORD = 'xxx'
GO
-- User database
CREATE USER pmp
FOR LOGIN pmp
WITH DEFAULT_SCHEMA = dbo
GO
EXEC sp_addrolemember N'db_owner', N'pmp'
GO
-- Master
ALTER LOGIN pmp DISABLE
GO
オブジェクトエクスプローラー
この状況は、サーバー ログインを作成してから包含データベース ユーザーを作成したが、データベース ユーザーがマスターのログインに接続されていない場合にのみ発生します。包含データベース ユーザーはサーバー レベルのログインに依存しません。 「FOR LOGIN」句を使用してユーザーを作成する必要があります。これにより、データベース レベルのユーザーがサーバー レベルのログインに接続されます。
サーバー上に作成されたデータベースで使用されるサーバー ログインを作成するための正しい構文は次のとおりです。
-- On master database
CREATE LOGIN TestUser
WITH PASSWORD = 'ThisIsAStrongPassword!'
GO
CREATE USER TestUser
FOR LOGIN TestUser
WITH DEFAULT_SCHEMA = dbo
GO
-- create user on database level
CREATE USER TestUser
FOR LOGIN TestUser
WITH DEFAULT_SCHEMA = dbo
GO