SQL Server 2008 с проверкой подлинности Windows: имя входа Windows сопоставляется нескольким пользователям БД одновременно? - PullRequest
1 голос
/ 05 февраля 2011

Я настроил двух пользователей в базе данных SQL Server 2008 Express: red и round.

  • red сопоставляется с локальной группой Windows MACHINE\Red.
    red является членом ролей базы данных по умолчанию db_datawriter.

  • round сопоставляется с локальной группой Windows с именем MACHINE\Round.
    round является членом ролей базы данных по умолчанию db_denydatawriter.

Обе локальные группы Windows содержат локального пользователя Windows MACHINE\tomato.

Из моего приложения .NET я сейчас пытаюсь INSERT данных в какую-то таблицу базы данных, когда вошел в систему как MACHINE\tomato (и подключившись к базе данных с помощью аутентификации Windows). Это не работает, предположительно из-за членства пользователя SQL round в роли db_denydatawriter.

Итак, как можно сопоставить мою учетную запись Windows двум пользователям 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, а не red или round?

1 Ответ

2 голосов
/ 06 февраля 2011

Все работает точно так, как должно.Начну снизу.Когда вы получаете доступ к папке, которая дает разрешения для группы «Домен \ Программисты», вы по-прежнему уникально идентифицируетесь как «Домен \ Пользователь».Таким образом, несмотря на то, что он учитывает все ваши роли, сопоставленных пользователей и т. Д. Для всего, что ему необходимо для аудита, вы все равно будете им, а не просто someone-from-"Domain\Programmers".SQL Server просто сообщает, кто вы.

Что касается сопоставленных входов в систему, поскольку вы можете сопоставить несколько групп Windows, SQL Server учитывает все без исключения.Он должен, в противном случае 2 роли sql сопоставляются с «Domain \ Programmers» и «Domain \ SysAdmin», каждая из которых имеет доступ к различным базам данных.Можно ожидать, что у вас будет доступ ко всем базам данных из комбинации двух групп Windows.Исходя из этого, вся матрица доступа строится из всех

  • оконных пользовательских привилегий
  • прямых оконных пользовательских ролей (для роли)
  • специальные разрешения для групп Windows
  • специальные разрешения для групп Windows (для каждой роли)

В соответствии с «запретить козыри позволяют» механизм , общий для обоихWindows и SQL Server, одно запрещение заблокирует весь доступ, в противном случае одно разрешение от любой ветви разрешит доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...