1

SQL Server 2008 Express データベース内に 2 人のユーザーを構成しました:redround.

  • redローカル Windows グループにマップされますMACHINE\Red
    redデフォルトのデータベース ロールのメンバーですdb_datawriter

  • roundという名前のローカル Windows グループにマップされMACHINE\Roundます。
    roundデフォルトのデータベース ロールのメンバーですdb_denydatawriter

両方のローカル Windows グループには、ローカル Windows ユーザーが含まれていますMACHINE\tomato

私の.NETアプリケーションから、としてログインしている間(そしてWindows認証を使用してデータベースに接続することによって)、INSERTデータベーステーブルにデータを入力しようとしています。おそらくロール内MACHINE\tomatoの SQL ユーザーのメンバーシップが原因で、これは機能しません。rounddb_denydatawriter

では、Windows ログインを 2 人の SQL Server ユーザーに同時にマップするにはどうすればよいでしょうか?

--                      MACHINE\Red ---------- red ------- db_datawriter
--                    /
--     MACHINE\tomato
--                    \
--                      MACHINE\Round ------- round ------ db_denydatawriter

そして、どのようにして現在のログインを取得すると、

SELECT CURRENT_USER   -- I could also use SYSTEM_USER or ORIGINAL_LOGIN()
                      -- with exactly the same result, it seems

私は戻ってきますMYMACHINE\tomato、そしてそうではありませんredround

4

1 に答える 1

2

すべてが正しく機能します。下から始めます。グループ「Domain\Programmers」にアクセス許可を与えるフォルダーにアクセスしている場合でも、「Domain\User」として一意に識別できます。したがって、すべての役割、マップされたユーザーなどが考慮されますが、監査する必要があるものはすべて、単にではなく、それでもかまいませんsomeone-from-"Domain\Programmers"。SQL Serverは、あなたが誰であるかを正確に報告しているだけです。

マップされたログインに関しては、複数のWindowsグループにマップできるため、SQLServerはすべてのグループを考慮に入れます。それ以外の場合は、「Domain\Programmers」と「Domain\SysAdmin」にマップされた2つのSQLロールがあり、それぞれが異なるデータベースにアクセスできます。2つのWindowsグループの組み合わせからすべてのデータベースにアクセスできることが期待されます。その後、アクセスマトリックス全体がすべての

  • Windowsユーザー固有の権限
  • 直接windows-user-role固有の権限(役割ごと)
  • Windowsグループ固有のアクセス許可
  • windows-group-role固有のアクセス許可(ロールごと)

WindowsとSQLServerの両方に共通する「切り札を拒否する」メカニズムに沿って、単一の拒否はすべてのアクセスをブロックします。そうでない場合、任意のブランチからの単一の許可がアクセスを許可します。

于 2011-02-06T06:38:28.600 に答える