Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Скрипт сохранения/восстановления логинов  [new]
Tony13
Member

Откуда:
Сообщений: 16
Доброе время суток!
У нас в компании есть базы данных в MS SQL Server 2005, которые часто заменяются привезенными из филиала.
Необходимо написать скрипт, который бы "запоминал" пользователей с их правами в базе данных, а потом "прописывал" их в замененной базе данных.
Специалисты в SQL помогите как это можно реализовать?
Всем заранее спасибо!
20 апр 09, 12:41    [7086600]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Пользователи и права на объекты храняться в самой бд и восстанавливаются вместе с бэкапом. А вот что может потеряться, так это маппинг логинов на пользователей бд, который ведется по sidу. sp_change_users_login Вам в помощь.
20 апр 09, 13:34    [7086932]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
vino
Member

Откуда:
Сообщений: 1191
Tony13, тут действовать надо осторожно, чтобы не порешить свой сервер и работоспособность БД обеспечить. Видимо, проблема в совпадении имен пользователей БД. Так что разбирайтесь. А инфы по сохранению/восстановлению паролей здесь навалом, и это тоже пригодится
20 апр 09, 13:55    [7087053]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
Crimean
Member

Откуда:
Сообщений: 13148
в филиалах пропишите своих пользователей разик - будут приходить к вам дальше с бакапами :)
21 апр 09, 09:45    [7089990]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
Tony13
Member

Откуда:
Сообщений: 16
Crimean
в филиалах пропишите своих пользователей разик - будут приходить к вам дальше с бакапами :)


В том, то и проблема, что политика безопасности филиала не позволяет прописать наших пользователей...
21 апр 09, 11:32    [7090733]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Tony13
Crimean
в филиалах пропишите своих пользователей разик - будут приходить к вам дальше с бакапами :)


В том, то и проблема, что политика безопасности филиала не позволяет прописать наших пользователей...


налицо полное непонимание вопроса. я не говорю про "логины на сервере". я говорю про "пользователей в базах", ага? зачем на филиалах ваши логины? правильно, незачем. а пользователи в базе лишние никак никому помешать не могут. если там параноики - пусть подизаблят "ваши" логины и делов
21 апр 09, 12:15    [7091083]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4111
Tony13
Доброе время суток!
У нас в компании есть базы данных в MS SQL Server 2005, которые часто заменяются привезенными из филиала.
Необходимо написать скрипт, который бы "запоминал" пользователей с их правами в базе данных, а потом "прописывал" их в замененной базе данных.
Специалисты в SQL помогите как это можно реализовать?
Всем заранее спасибо!


Держи:
declare  @UserID        DSIDENTIFIER,
         @Brief         varchar(30),
         @Name          varchar(100)

declare @sql nvarchar(100)

-------------- тут список пользователей, которых нужно обновить -------------
declare UserCur insensitive cursor for
  select u.UserID, rtrim(u.Brief), isnull(rtrim(u.Name), '')
  from tUser u
  where u.UserType = 0 and rtrim(u.Brief) <> 'sa'

open UserCur
	fetch UserCur into @UserID, @Brief, @Name

while ( @@fetch_status = 0 )
begin
	print @Name
	--------------- удаление схемы ---------------------------
	IF  EXISTS (SELECT * FROM sys.schemas WHERE name = @Brief )
	begin
	    set @sql = 'DROP SCHEMA [' + @Brief + ']';
		exec(@sql);
	end
    --------------- удаление пользователя -------------------------------
	IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = @Brief)
	begin
	    set @sql = 'DROP USER [' + @Brief + ']';
		exec(@sql);
	end
	--------------- создание логина, если нет такого -----------------
	if not exists(select 1 from sys.syslogins where loginname = @Brief)
	begin
		set @sql = N'CREATE LOGIN [' + @Brief + N'] WITH PASSWORD=' + N'12345678' + ', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
		exec(@sql);
	end  
		----------- создание схемы для пользователя --------------------
		set @sql = N'CREATE SCHEMA [' + @Brief + N'] AUTHORIZATION [dbo]'
		exec(@sql);
		----------- создание пользователя ------------------------------
		set @sql = N'CREATE USER [' + @Brief + N'] FOR LOGIN ' + @Brief + N' WITH DEFAULT_SCHEMA = [' + @Brief + ']';
		exec(@sql);
		----------- добавление в роль владельца базы --------------------
		set @sql = N'EXEC sp_addrolemember [db_owner], [' + @Brief + N']';
		exec(@sql);

	fetch UserCur into @UserID, @Brief, @Name
end
21 апр 09, 12:32    [7091228]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
Tony13
Member

Откуда:
Сообщений: 16
SQL2008,

При запуске скрипта, возникает ошибка:
Parameter or variable '@UserID' has an invalid data type.
24 апр 09, 10:29    [7108704]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4111
Tony13
SQL2008,

При запуске скрипта, возникает ошибка:
Parameter or variable '@UserID' has an invalid data type.

Этот пользовательский тип данных. Замените на int
24 апр 09, 11:43    [7109292]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4111
Разумеется, что и таблицы tUser у вас нет!
Адаптируйте под свои данные! Это же пример!
24 апр 09, 11:45    [7109306]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
Tony13
Member

Откуда:
Сообщений: 16
SQL2008
Разумеется, что и таблицы tUser у вас нет!
Адаптируйте под свои данные! Это же пример!


Не могли бы поподробнее рассказать о работе скрипта?
4 май 09, 08:37    [7140779]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
Shadow373
Member

Откуда:
Сообщений: 25
Tony13

Не могли бы поподробнее рассказать о работе скрипта?

а что конкретно вас интересует?
там же есть комментарии что делает каждая часть скрипта.
единственное, что можно рассказать, это о табличке tUser, которую использует в примере уважаемый SQL2008. tUser - это (насколько я догадался по наименованиям полей) таблица из АБС "Диасофт".
в поле UserID хранится уникальный идентификатор пользователя, который, вам не нужен. в поле Brief хранится имя пользователя, например USER00 (оно же loginname), в поле Name - реальное имя типа "Иванов И.И.". так что все операции скрипта работают именно с логином пользователя.
так что сначала делаем выборку пользователей, а потом в цикле (fetch) сначала убиваем все данные о пользователе конкретной базы данных, а потом заново их воссоздаем.
единственное, что я бы добавил для выполнения этой последовательности - это две первых строки:
use [имя_вашей_БД]
go
declare ....
тогда у вас будет четкая уверенность, что возмездие свершится над нужной базой ;).

p.s. приношу свою благодарность уважаемому SQL2008. минимум одну дополнительную умную мыслю я из его примера тоже подчерпнул. у меня это реализовано было несколько иначе.
14 май 09, 11:19    [7178495]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт сохранения/восстановления логинов  [new]
Repetuz
Member

Откуда:
Сообщений: 1
Crimean
Tony13
Crimean
в филиалах пропишите своих пользователей разик - будут приходить к вам дальше с бакапами :)


В том, то и проблема, что политика безопасности филиала не позволяет прописать наших пользователей...


налицо полное непонимание вопроса. я не говорю про "логины на сервере". я говорю про "пользователей в базах", ага? зачем на филиалах ваши логины? правильно, незачем. а пользователи в базе лишние никак никому помешать не могут. если там параноики - пусть подизаблят "ваши" логины и делов


Приветствую, помоему полное непонимание все-таки у Вас, поскольку возможна ситуация, что на филиалах существуют пользователи с таким же именем, что и на втором филиале, только с разными правами доступа (уникальными они увы не могут, поскольку создавать их может любой программист нашего отдела, а их 8). А еще шикарно когда операторы меняются по 10 раз в году, и что? мне постоянно необходимо ездить на второй филиал и заводить новых и говорить, что нельзя удалять пользователей и заводить их заново, причем каждому из сотрудников? Это подход простой, но не професиональный и не удобный для крупного предприятния

Нужен скрипт.....
Благо тут его уже реализовали, если есть необходимость, могу выложить свой вариант, хотя он более громоздкий и непонятный
20 авг 09, 09:38    [7559611]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить