создавать пользователей, логины и давать разрешения на сервере SQL - PullRequest
2 голосов
/ 28 февраля 2011

я создал логин: bob

я дал ему разрешение на создание базы данных, используя: sp_addsrvrolemember 'dbcreator'

Это автоматически создает пользователя под именем bob и с тем же именем, что и имя для входа.

Login - bob
user- bob

Создан ли пользователь в базе данных master?

Я выполнил этот запрос: select * from sysusers, но я не смог найти ни одного пользователя с именем 'bob' в таблице. Почему так?

'bob' имеет разрешение на создание базы данных.

Теперь я хочу дать ему разрешение на создание таблицы. так как мне это сделать? Когда я делаю это, используя грант, то он говорит, что не может найти пользователя «Боб»? Почему так?

grant create table to bob

После этого я подключил sql сервер с логином 'bob' Затем я создал базу данных: bobdb я вошел в bobdb. Теперь, как дать разрешение на создание таблицы для bob в bobdb

Нужно ли добавлять нового пользователя?

Ответы [ 2 ]

5 голосов
/ 28 февраля 2011

Логин находится на уровне сервера - у вас есть логин на сервере.

Пользователь находится на уровне базы данных - вы можете определить другого пользователя для одного входа в каждую отдельную базу данных.

Пользователь создается в базе данных, которая в данный момент активна при выполнении оператора create user .... ...

Итак, если вы были в базе данных master в SSMS, когда выполняли этот запрос - да, тогда этот пользователь был создан в базе данных master и больше нигде не присутствует ...

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

Подключен к любой базе данных как вы сами ...

CREATE LOGIN Bob WITH PASSWORD='<the password>';

Это создает уровень сервера Логин , который имеет только разрешения для подключения к любой базе данных в качестве гостя Пользователь .Теперь добавьте Login к роли уровня сервера dbcreator на уровне сервера и подключитесь к серверу как Bob .

Выпуск CREATE DATABASE, у вас все еще будет только Логин с именем Bob . Логин будет владельцем базы данных, которую вы можете проверить, выполнив эту команду ...

SELECT  sp.name AS LoginName, dp.name AS UserName
FROM    bobdb.sys.database_principals AS dp
        INNER JOIN sys.server_principals AS sp ON dp.sid = sp.sid
WHERE   sp.name = 'Bob'
;

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

Предоставление прав явно пользователю Бобу внутри bobdb будет уместно, если вы измените владельца базы данных( ALTER AUTHORIZATION ON DATABASE :: bobdb TO LoginNameOfNewOwner ) учетная запись, отличная от Боба.Затем Боба можно добавить как пользователя с именем Боб, а затем предоставить этому пользователю только те минимальные привилегии, которые ему необходимы.

Для получения дополнительной информации см. Разделы, связанные со страницей в db_owner в Books Online

Кроме того, sysusers устарела после SQL 2000. См. новые представления системного каталога .

Наконец, К. Брайан Келли опубликовал хорошее резюме логин / отображение пользователя на сайте SSC.

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