Как изменить владельца базы данных ms sql
Перейти к содержимому

Как изменить владельца базы данных ms sql

  • автор:

SQL-Ex blog

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

Добавил Sergey Moiseenko on Среда, 3 января. 2024

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

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

Владелец базы данных устанавливается во время создания базы данных или может быть изменен позднее с помощью оператора 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.
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.

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

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

Комментарии

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

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

sp_changedbowner (Transact-SQL)

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого используйте ALTER AUTHORIZATION .

Синтаксис

 sp_changedbowner [ @loginame = ] 'login' [ , [ @map = ] remap_alias_flag ] 

Аргументы

[ ] @loginame
Идентификатор имени входа нового владельца текущей базы данных. имя входаsysname, без значения по умолчанию. имя входа должно быть уже существующим пользователем SQL Server или пользователем Windows. имя входа не может стать владельцем текущей базы данных, если у нее уже есть доступ к базе данных с помощью существующей учетной записи безопасности пользователя в базе данных. Чтобы избежать этой ситуации, сначала удалите данного пользователя в текущей базе данных.

[ ] @map=remap_alias_flag
Параметр remap_alias_flag устарел, так как псевдонимы входа были удалены из SQL Server. Использование параметра remap_alias_flag не приводит к ошибке, но не влияет.

Значения кода возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

После выполнения процедуры sp_changedbowner новый владелец становится известным в базе данных как пользователь dbo. Пользователь dbo имеет неявные разрешения на выполнение любых действий в базе данных.

Владельца системных баз данных master, model или tempdb нельзя изменить.

Чтобы отобразить список допустимых значений входа , выполните хранимую процедуру sp_helplogins.

Выполнение sp_changedbowner только с параметром входа изменяет владение базой данных для входа.

Можно изменить владельца любого защищаемого объекта с помощью инструкции ALTER AUTHORIZATION. Дополнительные сведения см. в статье ALTER AUTHORIZATION (Transact-SQL).

Разрешения

Необходимо разрешение TAKE OWNERSHIP для базы данных. Если новый владелец имеет соответствующего пользователя в базе данных, требуется разрешение IMPERSONATE для имени входа, в противном случае необходимо разрешение CONTROL SERVER для сервера.

Примеры

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

EXEC sp_changedbowner 'Albert'; 

sp_changeobjectowner (Transact-SQL)

Эта хранимая процедура работает только с объектами, доступными в Microsoft SQL Server 2000 (8.x). Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого используйте ALTER SCHEMA или ALTER AUTHORIZATION . sp_changeobjectowner изменяет схему и владельца. Чтобы сохранить совместимость с более ранними версиями SQL Server, эта хранимая процедура будет изменять только владельцев объектов, если текущий владелец и новый владелец имеют то же имя, что и имена пользователей базы данных.

К этой хранимой процедуре было добавлено требование новых разрешений.

Синтаксис

 sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner' 

Аргументы

[ @objname = ] ‘object’ Имя существующей таблицы, представления, определяемой пользователем функции или хранимой процедуры в текущей базе данных. объект является nvarchar(776) без значения по умолчанию. объект может быть квалифицирован владельцем существующего объекта в форме existing_owner. объект, если схема и его владелец имеют то же имя.

[ @newowner = ] ‘owner_ ‘ Имя учетной записи безопасности, которая будет новым владельцем объекта. владелецsysname, без значения по умолчанию. владелец должен быть допустимым пользователем базы данных, ролью сервера, именем входа Microsoft Windows или группой Windows с доступом к текущей базе данных. Если владелец является пользователем Windows или членом группы Windows, для которой нет соответствующего участника уровня базы данных, пользователь базы данных будет создан.

Значения кода возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

sp_changeobjectowner удаляет все существующие разрешения из объекта. Вам придется повторно применять все разрешения, которые необходимо сохранить после выполнения sp_changeobjectowner. Поэтому перед запуском sp_changeobjectowner рекомендуется выполнить скрипт для выполнения существующих разрешений. После изменения владения объектом можно использовать этот скрипт для переназначения разрешений. Перед тем как выполнить скрипт разрешений, в нем необходимо изменить владельца объекта.

Чтобы изменить владельца защищенного объекта, используйте инструкцию ALTER AUTHORIZATION. Чтобы изменить схему, используйте инструкцию ALTER SCHEMA.

Разрешения

Требуется членство в предопределенных ролях базы данных db_owner или членство в предопределенных ролях базы данных db_ddladmin и предопределенных ролях базы данных db_securityadmin, а также разрешение CONTROL для объекта.

Примеры

В следующем примере владелец authors таблицы Corporate\GeorgeW изменяется на .

EXEC sp_changeobjectowner 'authors', 'Corporate\GeorgeW'; GO 

�� Как изменить владельца базы данных MS SQL: простой руководство

Здесь ‘имя_базы_данных’ — это имя вашей базы данных, а ‘новый_владелец’ — это новый владелец, которому вы хотите передать базу данных. Пример:

 USE MyDatabase; GO EXEC sp_changedbowner 'MyNewOwner'; 

После выполнения этого запроса, владелец базы данных MS SQL изменится на указанного ‘нового_владельца’. Убедитесь, что вы имеете достаточные привилегии для выполнения этого запроса.

Детальный ответ

Как изменить владельца базы данных MS SQL? Изменение владельца базы данных в MS SQL может потребоваться при необходимости передачи контроля над базой данных другому пользователю или учетной записи. В этой статье мы рассмотрим подробное объяснение и примеры кода для изменения владельца базы данных MS SQL. 1. Прежде всего, что такое владелец базы данных? Владелец базы данных — это учетная запись, которая имеет наивысшие привилегии и контроль над базой данных. В MS SQL Server владелец базы данных обычно указывается при создании базы данных или может быть изменен позже. 2. Проверка текущего владельца базы данных MS SQL Прежде чем изменить владельца базы данных, полезно узнать текущего владельца. Для этого можно выполнить следующий SQL-запрос:

USE ; GO SELECT name, SUSER_SNAME(owner_sid) AS owner FROM sys.databases WHERE name = '';

Здесь <имя_базы_данных>— это имя вашей базы данных, для которой вы хотите проверить владельца. 3. Изменение владельца базы данных MS SQL Для изменения владельца базы данных в MS SQL можно использовать хранимую процедуру sp_changedbowner . Ниже приведен пример использования этой хранимой процедуры:

USE ; GO EXEC sp_changedbowner '';

Здесь <имя_базы_данных>— это имя вашей базы данных, а — это имя нового владельца, которому вы хотите передать базу данных. 4. Примеры изменения владельца базы данных MS SQL В приведенных ниже примерах показано, как изменить владельца базы данных MS SQL для базы данных с именем «MyDatabase». Замените «MyDatabase» на имя вашей базы данных в каждом примере. 4.1 Замена владельца базы данных пользователем:

USE MyDatabase; GO EXEC sp_changedbowner 'NewOwner';

Здесь мы использовали хранимую процедуру sp_changedbowner , чтобы передать владельца базы данных пользователю с именем «NewOwner». 4.2 Замена владельца базы данных учетной записью:

USE MyDatabase; GO EXEC sp_changedbowner 'DOMAIN\NewOwner';

Здесь мы использовали хранимую процедуру sp_changedbowner , чтобы передать владельца базы данных учетной записи «DOMAIN\NewOwner». 5. Проверка изменения владельца базы данных MS SQL Чтобы проверить, что владелец базы данных был успешно изменен, можно выполнить запрос, который мы использовали в начале для проверки текущего владельца базы данных:

USE MyDatabase; GO SELECT name, SUSER_SNAME(owner_sid) AS owner FROM sys.databases WHERE name = 'MyDatabase';

Убедитесь, что новый владелец отображается в результате. Заключение Теперь вы знаете, как изменить владельца базы данных MS SQL. Используйте код и инструкции, предоставленные в этой статье, чтобы успешно передать контроль над вашей базой данных другому пользователю или учетной записи.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *