1

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

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

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

В обеих локальных группах Windows есть локальный пользователь Windows MACHINE\tomato.

Из моего приложения .NET теперь я пытаюсь загрузить данные из базы данных в 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?

ответ

2

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

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

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

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

+0

* @ cyberwiki *, спасибо за ваш ответ. Я искал документацию по этому вопросу на MSDN, но в основном нашел только туманные, беглые кусочки. Можете ли вы порекомендовать хороший ресурс по этой теме? – stakx