Skip to content

Как поменять владельца базы данных SQL Server

Пересказ статьи Nisarg Upadhyay. How to Change the SQL Server Database Owner


В SQL Server с каждой базой данных связан владелец (owner), который является принципалом, имеющим определенные разрешения и контроль над базой данных. Владелец базы данных - это пользователь или логин, которому предоставлена пользовательская роль dbo (database owner) на эту базу данных. Владелец базы данных имеет наивысший уровень разрешений в пределах базы данных и может выполнять административные задачи, такие как создание или модификация объектов, управление безопасностью и изменение схемы базы данных.
Изменение владельца базы данных в SQL Server может быть вызвано несколькими причинами:

  • Безопасность: изменяя владельца базы данных, вы можете гарантировать, что владение и связанные с ним разрешения корректно присвоены соответствующему пользователю или логину. Это помогает поддерживать безопасную среду, контролируя доступ к базе данных.

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

  • Совместимость: изменение владельца базы данных может потребоваться, когда база данных переносится с одного сервера на другой. Владение должно обновиться, чтобы соответствовать логину или пользователю нового сервера.

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

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

Владелец базы данных устанавливается во время создания базы данных или может быть изменен позднее с помощью оператора ALTER AUTHORIZATION или системной хранимой процедуры sp_changedbowner . По умолчанию, когда создается новая база данных, пользователь, который создает базу данных, становится ее владельцем. Однако вы можете явно указать другого пользователя или логин в качестве владельца при создании.

В этой статье мы рассмотрим, как изменить владельца базы данных. Для демонстрации я восстановил базу данных wideworldimporters.

Когда мы создаем или восстанавливаем новую базу данных, пользователь, кто создавал или восстанавливал ее, становится владельцем базы данных. Вы можете увидеть владельца базы данных, выполнив следующий запрос:

use master 
go
select name[Database Name], SUSER_SNAME(owner_sid)[Database Owner], create_date [Database Create Date]
from sys.databases

Запрос получает имя базы данных (столбец name) и преобразует owner_sid в логин или имя пользователя с помощью функции SUSER_SNAME, которая дает вам владельца базы данных.



В выводе запроса показано, что владельцем базы данных wideworldimporters является DC0\Administrator. Мы хотим изменить его на DC0\n.upadhyay.

Изменение владения базой данных с помощью SSMS


Откройте SSMS и подключитесь к движку базы данных, щелкните правой кнопкой на Wideworldimportors и выберите Properties (свойства). В диалоговом окне Database Properties выберите Files и щелкните на иконке с тремя точками.



В диалоговом окне Select Database Owner (выберите владельца базы данных), укажите имя пользователя в текстовой области Enter object names to select (введите имена объектов для выбора), вы также можете выполнить поиск требуемого имени пользователя. Чтобы выбрать имя пользователя, щелкните Browse. Откроется другое окно диалога Browse for Object. Здесь вы можете выбрать желаемого пользователя из списка. Заметим, что вы можете увидеть только те логины SQL, которые уже существуют в экземпляре SQL Server.

В нашем случае мы выбираем пользователя DC0\n.upadhyay, поэтому выберем его из списка и щелкнем ОК.



Выбранное имя пользователя будет добавлено в окно диалога. Щелкните ОК. Для проверки изменений, выполните следующий запрос в SQL Server Management Studio.

use master 
go
select name[Database Name],SUSER_SNAME(owner_sid)[Database Owner], create_date [Database Create Date]
from sys.databases

Изменение владения базой данных с помощью sp_changedbowner и ALTER AUTHORIZATION


Мы можем использовать sp_changedbowner для смены владельца базы данных.

Синтаксис
Exec sp_changedbowner [user_name]

Здесь параметр user_name - это логин SQL, который вы хотите использовать в качестве нового владельца базы данных.

Пример. Следующий запрос использует sp_changedbowner для изменения владельца базы данных wideworldexporter с DC0\n.upadhyay на DC0\n.vyas.

use [WideWorldImporters] 
Go
exec sp_changedbowner 'DC0\n.vyas'
Go

Следует отметить, что хранимая процедура sp_changedbowner является устаревшей. Поэтому вместо нее мы можем использовать оператор SQL ALTER AUTHORIZATION для изменения владельца базы данных.

Синтаксис оператора ALTER AUTHORIZATION:

ALTER AUTHORIZATION ON DATABASE:: TO ;

Здесь

  1. database_name: задает имя базы данных, владельца которой мы хотим поменять.

  2. new_owner: задает новый логин или пользователя базы данных SQL Server.

Пример. Допустим, вы хотите изменить владельца базы данных wideworldimporters с DC0\n.vyas на DC0\Administrator. Для этого выполните следующий запрос:

ALTER AUTHORIZATION ON DATABASE::WideWorldImporters TO [DC0\Administrator];

Проверьте изменения с помощью следующего запроса:

use master 
go
select name[Database Name],SUSER_SNAME(owner_sid)[Database Owner], create_date [Database Create Date]
from sys.databases

Скриншот:



На рисунке видно, что владельцем базы данных стал DC0\Administrator.

Ссылки по теме
1. Безопасность SQL Server - модель безопасности с использованием определяемых пользователем ролей
2. Объекты поддержки диаграмм базы данных SQL Server Management Studio не могут быть установлены

Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.