«Общедоступная» роль базы данных SQL Server 2005, кажется, не применяется? - PullRequest
0 голосов
/ 16 декабря 2008

У меня есть база данных SQL Server 2005, к которой я пытаюсь получить доступ как ограниченная учетная запись пользователя с использованием аутентификации Windows. Мне добавили BUILTIN \ Users в качестве пользователя базы данных (до этого я даже не мог открыть базу данных). Я работаю в предположении, что у всех должны быть права доступа к «публичной» роли, поэтому я ничего не делал с назначением ролей. В tblFoo я могу использовать диалог свойств SSMS (страница «Разрешения»), чтобы добавить «public», а затем установить явные разрешения. Среди них «Грант» для SELECT. Но работает

SELECT * from tblFoo;

как ограниченная (BUILTIN \ Users) учетная запись выдает мне сообщение об ошибке «Выберите разрешение, запрещенное для объекта« tblFoo », базы данных« bar », схемы« dbo »». В диалоговом окне свойств есть кнопка «Действующие разрешения», но она неактивна.

Далее я попытался создать непривилегированную учетную запись с именем «UserTest», добавив ее на уровне сервера, а затем сопоставив ее с базой данных «bar». Это позволило мне добавить UserTest в список «Пользователи или роли», что позволило мне запустить «Действующие разрешения» для учетной записи. Нет разрешений, перечисленных вообще - это не кажется правильным. Учетная запись должна быть общедоступной, а общедоступные гранты (среди прочего) выбираются на tblFoo, так почему учетная запись UserTest не показывает действующее разрешение? Я чувствую, что схожу с ума здесь.

В сторону: я знаю, что многим людям не нравится использовать роль "public" для установки разрешений. Это всего лишь мое время возиться; В финальном дизайне я уверен, что у нас будет несколько гибких (пользовательских) ролей базы данных. Я просто пытаюсь выяснить, какое поведение я вижу, поэтому, пожалуйста, не "не делай этого!" ответы.

ОБНОВЛЕНИЕ: Очевидно, я знаю достаточно SQL Server, чтобы представлять опасность для себя и других. При настройке разрешений (как я уже сказал, «среди прочих») у меня был DENY CONTROL. Когда я установил это разрешение, мне показалось, что я попытался найти то, что он сделал, имел смутное представление и выбрал DENY. В настоящее время я не могу вспомнить, почему это казалось правильным, но, похоже, именно по этой причине я получал отказы в разрешениях. Поэтому я обновляю свой вопрос: может ли кто-нибудь объяснить разрешение «КОНТРОЛЬ» в отношении таблиц?

Ответы [ 2 ]

1 голос
/ 16 декабря 2008

Вам нужно только иметь права SELECT. В сыром SQL (см. Значок / кнопку «скрипт» в диалоговом окне) это GRANT SELECT ON dbo.tblFoo to public. Это единственное разрешение, необходимое для просмотра данных,

В этом случае в сообщении об ошибке явно упоминается «отказать». «DENY» - это само по себе право, поэтому оно упоминает о нем

Если у вас нет прав, вы получите сообщение (очень приблизительно): «tblFoo не существует или у вас нет прав»

Упоминается "DENY CONTROL" здесь . В этом случае вы отказали всем в правах на публичную роль.

Получатель фактически имеет все определенные разрешения на защищаемый

0 голосов
/ 16 декабря 2008

Предполагая, что "UserTest" является учетной записью пользователя домена, подключитесь как член роли sysadmin и запустите

EXEC MASTER.dbo.xp_logininfo 'Domain\UserTest', 'all'

(заменяя ваше доменное имя на «Домен»)

при этом будут отображаться группы Windows и т. Д., От которых учетная запись наследует разрешения безопасности, и уровень доступа, например вы ожидаете увидеть что-то вроде:

account name     type    privilege  mapped  login name       permission path
domain\usertest  user   user               domain\usertest  BUILTIN\Users

Это поможет устранить неполадки, от которых учетная запись наследует разрешения, например, в какие группы Windows он входит, у которых есть разрешения на базу данных. Если бы все выглядело нормально, я бы следовал твоему собственному совету и не связывался с публичной ролью.

  • Создать роль базы данных в вашем базы данных
  • Назначить явные разрешения для этого Роль
  • Создать логин на сервере для вашего пользователя счет
  • Откройте логин сервера, перейдите к Раздел «Отображение пользователей», нажмите на базы данных и выберите базу данных роль, которую вы создали
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...