Пользователя dbo нельзя удалить.
Для связывания учетной записи (login) с определенным именем пользователя (user) можно воспользоваться следующей хранимой процедурой:
sp_adduser [@loginame =] 'login' [,[@name_in_db =] 'user'] [.[@grpname =] 'role']
Ниже дается пояснение используемых в ней параметров:
О login— имя учетной записи, которую необходимо связать с именем пользователя базы данных;
О user — имя пользователя базы данных, с которым ассоциируется данная учетная запись (в базе данных заранее не должно существовать пользователя с указанным именем);
О role — этот параметр определяет роль, в которую данный пользователь будет включен (подробнее о ролях будет рассказано позже). Хранимая процедура sp_grantdbaccess позволяет отобразить учетную запись Windows NT в имя пользователя:
sp_grantdbaccess [@loginame =] 'login' [,[@name_in_db =] 'user']
Параметры означают следующее:
О login— имя учетной записи пользователя или группы пользователей Windows NT, которым необходимо предоставить доступ к базе данных. Имя должно снабжаться ссылкой на домен, в котором учетная запись определена. Указанной учетной записи не обязательно должен быть предоставлен персональный доступ к SQL Server. Вполне возможно, что соединение с сервером устанавливается вследствие членства в группе Windows NT, которая имеет доступ к серверу;
О user — имя пользователя базы данных, с которым ассоциируется данная учетная запись.
Пользователь, который создает объект в базе данных, например таблицу, хранимую процедуру или представление, становится владельцем объекта. Владелец объекта (database object owner) имеет все права доступа к созданному им объекту. Чтобы пользователь мог создать объект, владелец базы данных (dbo) должен предоставить пользователю соответствующие права. Полное имя создаваемого объекта включает в себя имя создавшего его пользователя. Если пользователь хочет обратиться к таблице, используя только ее имя и не указывая владельца, SQL Server применяет следующий алгоритм поиска.
1. Ищется таблица, созданная пользователем, выполняющим запрос.
2. Если таблица не найдена, то ищется таблица, созданная владельцем базы данных (dbo).
Допустим, пользователь Liss пытается обратиться к таблице Lil iya .TableA, просто используя имя Tab! еА. Поскольку таблица, созданная Li I iya, не соответствует ни первому, ни второму критерию поиска, то таблица ТаЫеА найдена не будет и пользователь получит сообщение об ошибке. Для получения доступа к таблице необходимо ввести имя, включающее владельца объекта, то есть Liliya.TableA.
Владелец объекта не имеет никакого специального пароля или особых прав доступа. Он неявно имеет полный доступ, но должен явно предоставить доступ другим пользователям.
SQL Server позволяет передавать права владения от одного пользователя другому. Чтобы удалить владельца объекта из базы данных, сначала необходимо удалить все объекты, которые он создал, или передать права на их владение другому пользователю. Для этого можно использовать хранимую процедуру sp_changeobjectowner, имеющую следующий синтаксис:
sp_changeobjectowner [ @objname = ] 'object' , [ (Pnewowner = ] 'owner'
Здесь с помощью первого параметра указывается имя объекта, а с помощью второго — имя пользователя, который станет новым владельцем указанного объекта.
Роли сервера
Роль — это мощный инструмент, добавленный в SQL Server 7.0, чтобы заменить группы, которые использовались в предыдущих версиях. Роль позволяет объединять пользователей, выполняющих одинаковые функции, для упрощения администрирования системы безопасности SQL Server.
В SQL Server реализовано два вида стандартных ролей: на уровне сервера и на уровне баз данных. При установке SQL Server 2000 создается 9 фиксированных ролей сервера и 9 фиксированных ролей базы данных. Эти роли вы не сможете удалить, кроме того, нельзя модифицировать права их доступа. Вы не сможете предоставить пользователю права, которые имеют фиксированные роли сервера, другим способом, кроме как включением его в нужную роль.