SQL Server 2008 с аутентификацией Windows: логин Windows сопоставляется нескольким пользователям БД одновременно?

Я настроил двух пользователей в базе данных 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?


person stakx - no longer contributing    schedule 05.02.2011    source источник


Ответы (1)


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

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

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

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

person RichardTheKiwi    schedule 06.02.2011
comment
@cyberwiki, спасибо за ответ. Я искал документацию по этому поводу в MSDN, но в основном находил только расплывчатые, поверхностные фрагменты и фрагменты. Можете ли вы случайно порекомендовать хороший ресурс по этой теме? - person stakx - no longer contributing; 06.02.2011