Как проверить, существует ли логин, роль и пользователь базы в MS SQL Server

Задача: проверить, есть ли на сервере соответствующий серверный логин, роль на уровне базы данных, пользователь на уровне базы данных и создать в случае отсуствия. Решение приводится для MS SQL Server 2005 и выше.

Существование серверного логина

 
declare @user_name_db varchar(50), @password varchar(30), @sql_statement nvarchar(1000), @error_message varchar(1000)

set @user_name_db = 'a.s.pushkin'
set @password = 'pamyatnik'
if not exists (select name from sys.server_principals  where type = 'S' and name = @user_name_db)
begin
 select @sql_statement = 'CREATE LOGIN "' + @user_name_db + '" WITH PASSWORD = ''' + @password+ ''', CHECK_POLICY = OFF'
 exec sp_executesql @sql_statement 
end

Существование роли в текущей базе данных

if database_principal_id('db_executor') is null
begin
 create role db_executor
 grant execute to db_executor
end

Существование пользователя в текущей базе данных

if  (select  count(*) from sys.database_principals where name = @user_name_db) = 0
begin
 -- создаем пользователя
 select @sql_statement = 'CREATE USER "' + @user_name_db + '" FOR LOGIN "' + @user_name_db+  '"' 
 exec sp_executesql @sql_statement 
 -- прописываем права
 EXEC sp_addrolemember db_executor, @user_name_db
 EXEC sp_addrolemember db_datareader, @user_name_db
 EXEC sp_addrolemember db_datawriter, @user_name_db  
end
else
begin 
 set  @error_message = 'Пользователь  ' + @user_name_db + ' уже существует! '
 RAISERROR (@error_message, 14, 1) 
end

sp_executesql (Transact-SQL)
sys.server_principals (Transact-SQL)
Mapping SQL Server 2000 System Tables to SQL Server 2005 System Views
DATABASE_PRINCIPAL_ID (Transact-SQL)


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

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


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>