Windowsログインまたは混合モードを実行できますが、内部ログインのみを使用してすべてのWindowsログインをブロックするようにSQL Serverを構成できますか?
可能性のあるすべてのWindowsログインを追加し、それらを予防的(または対処的)手順として制限付き特権に設定する唯一のソリューションはありますか?
Windowsログインまたは混合モードを実行できますが、内部ログインのみを使用してすべてのWindowsログインをブロックするようにSQL Serverを構成できますか?
可能性のあるすべてのWindowsログインを追加し、それらを予防的(または対処的)手順として制限付き特権に設定する唯一のソリューションはありますか?
回答:
次の2つの理由により、完全に無効にすることはできません。
インストールには、ログインが用にプロビジョニングされているNT AUTHORITY\SYSTEM
、NT SERVICE\SQLSERVERAGENT
(またはSQLエージェントサービスアカウントを含むグループ)、およびNT SERVICE\MSSQLSERVER
(またはSQLデータベースエンジンサービスアカウントを含むグループ)。これらはsysadmin
、SQL Serverが正しく機能するために使用可能である必要がある- レベルのログインです。
簡単なテストでは、これらの3つのログインをすべて削除してもSQL Agentの再起動が妨げられただけであることが判明しました(データベースエンジンは正常に起動しました)が、他の2つのログインに依存する他の機能があると確信しています...それらはデフォルトで作成されました理由があるので、私はそれらをいじりません。(あなたがこれを自分でテストする場合、FYI:SSMSでのログインのDrop&Createスクリプトオプションは、サーバーロールメンバーシップをスクリプト化しません。)
シングルユーザーモードでは、ローカル管理者sysadmin
には、それらのユーザーを「含む」ログインが作成されているかどうかに関係なく、レベルの特権が自動的に付与されます。これは、車のキーをロックしたときのコートハンガーです。
他の回答で述べたように、明示的に作成されたWindowsログインのみが接続へのアクセス権を持ちます(私の元のコメントは正しくありませんでした)。ユーザーが作成したすべてのWindowsログインを削除することで、アクセスを防ぐことができます。
さらに一歩進んでWindowsログインが作成されないようにする必要がある場合は、ここから開始します(少なくとも2008年のポリシーベースの管理では、これを防ぐことができません)。
CREATE TRIGGER trg_PreventWindowsLogins
ON ALL SERVER
AFTER CREATE_LOGIN
AS
BEGIN
SET NOCOUNT ON;
IF (EVENTDATA().exist('/EVENT_INSTANCE[1]/LoginType[1]/text()[1] eq "Windows (NT) Login"') = 1)
BEGIN
RAISERROR(N'Not allowed to create Windows logins!', 16, 1);
ROLLBACK;
END
END
もちろん、十分な権限を持つ人なら誰でもこれを破ることができますが、それは別の問題です...
私が知る限り、SQL Server 2008 + R2でWindows認証を無効にすることはできません。
http://msdn.microsoft.com/en-us/library/ms144284%28v=sql.105%29.aspx
アクセスできる唯一のWindowsアカウントは、ログインとして明示的に追加されたもの(またはログインを持つグループのメンバー)です。