Отображение нескольких имен входа на сервер одному пользователю базы данных

11

Это кажется глупым вопросом, но, несмотря на некоторые исследования, я не смог найти какую-либо информацию только об этом (возможно, из-за неправильной терминологии).

Можно ли зарегистрировать несколько входов на сервер (проверка подлинности на сервере sql) одному пользователю базы данных (которому назначены полномочия в качестве члена роли базы данных)?

У меня есть десятки логинов sql (аутентификация на сервере sql), которым нужно прочитать один параметр из центральной базы данных, и я предпочел бы сопоставить все эти логины одному пользователю БД в целевой базе данных, чем создавать собственного пользователя БД для каждого логина.

Если да, какой будет правильный синтаксис T-SQL?

leepfrog
источник
Когда вы говорите «вход на сервер», вы имеете в виду учетные записи Windows или учетные записи SQL-сервера?
Фил Самнер
Я говорю об учетных записях сервера SQL.
Отредактирую
Как насчет того, чтобы создать, ROLEа затем добавить пользователей в роль. Таким образом, вы просто предоставляете разрешения для роли. Это поможет вам лучше управлять безопасностью. Кроме того, что такое версия сервера sql - 2008R2, 2012?
Кин Шах

Ответы:

19

Сначала убедитесь в терминологии. Логин - это субъект безопасности уровня экземпляра ( sys.server_principals), а пользователь - участник безопасности уровня базы данных ( sys.database_principals). Они объединены SID (идентификатор безопасности). Если вы посмотрите на системные представления выше, вы увидите, как они объединяются в формате 1: 1 по SID. Это 1 Вход в 1 пользователя в базе данных. Логин может иметь несколько пользователей, но они должны находиться в разных базах данных.

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

CREATE USER [UserName] FROM LOGIN [LoginName]

Оттуда вы можете поместить всех своих пользователей в одну (или несколько) роль. Роль - это контейнер, который имеет разрешения и разделяет эти разрешения с каждым пользователем (для ролей в базе данных) или логином (например, для ролей). Существует встроенная роль базы данных, db_datareaderкоторая предоставляет доступ для чтения каждой таблице и представлению в базе данных. Вы можете добавить всех своих пользователей к этой роли. Однако лучшей идеей будет создание новой роли и добавление ее к db_datareaderроли. Затем добавьте всех своих пользователей в новую роль. Преимущество здесь в том, что если вы хотите добавить дополнительные разрешения для группы, вы можете просто изменить разрешения для роли.

Создать роль путем:

CREATE ROLE RoleName

Добавить пользователя в роль (или одну роль в другую)

EXEC sp_addrolemember 'RoleName','UserName'

или если вы в 2012 или выше

ALTER ROLE [RoleName] ADD MEMBER [UserName]
Кеннет Фишер
источник
Спасибо за подробное объяснение и за предоставление справочной информации, Кеннет, то, что мне было неясно, было That's 1 Login to 1 User in a database.
leepfrog