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

Откуда: Москва
Сообщений: 24
День добрый.

Стоит задача сделать выборку логинов, которые имеют права на update, insert, delete хотя бы в одной базе сервера.
Есть ли какие-то процедуры или функции, которые смогут облегчить задачу и избавят от необходимости тыркать в студии вручную?
17 фев 15, 13:51    [17276216]     Ответить | Цитировать Сообщить модератору
 Re: Выборка пользователей с правами на изменение.  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
 
sys.database_principals  
sys.database_permissions 
17 фев 15, 15:39    [17277065]     Ответить | Цитировать Сообщить модератору
 Re: Выборка пользователей с правами на изменение.  [new]
paag5
Member

Откуда: Москва
Сообщений: 24
Все, разобрался.

Получилось нечто следующее:
IF OBJECT_ID('tempdb..#user_table') IS NOT NULL
BEGIN
    DROP TABLE #user_table;
END;

-- tmp Table to hold the user data
CREATE TABLE #user_table
(
    ServerName NVARCHAR(100) NULL,
    [Database] NVARCHAR(256) NULL,
    UserName NVARCHAR(128) NOT NULL,
    GroupName NVARCHAR(128) NULL,
    LoginName NVARCHAR(128) NULL,
    DefDBName NVARCHAR(256) NULL,
    DefSchemaName NVARCHAR(100) NULL,
    UserID INTEGER NOT NULL,
    [SID] UNIQUEIDENTIFIER NULL
);    

DECLARE @sql NVARCHAR(MAX);
SET @sql = '

    DECLARE @name SYSNAME,
            @sql_string NVARCHAR(MAX);

    -- Cursor containing all users for the current database context
    DECLARE usr_name CURSOR READ_ONLY FOR SELECT [name]
                                          FROM sysusers
                                          WHERE hasdbaccess = 1
                                          AND [name] NOT LIKE ''#%''
                                          AND [name] NOT IN (''guest'');

    OPEN usr_name;
    FETCH NEXT FROM usr_name INTO @name;

    WHILE (@@FETCH_STATUS = 0) -- This loop processes each database
    BEGIN

        -- if it''s a windows login surround with square brackets
        IF (@name LIKE ''%\%'')
        BEGIN
            SET @name = ''['' + @name + '']'';
        END

        SET @sql_string = N''EXEC sp_helpuser '' + @name;

        INSERT INTO #user_table
        (
            UserName,
            GroupName,
            LoginName,
            DefDBName,
            DefSchemaName,
            UserId,
            [SID]
        )
        EXEC(@sql_string); 

        -- Add Server & database name to dataset
        UPDATE #user_table
        SET ServerName = @@SERVERNAME,
        [Database] = DB_NAME()
        WHERE ServerName IS NULL
        AND [Database] IS NULL;

        -- Get the next database user
        FETCH NEXT FROM usr_name INTO @name; -- Get next user

    END

    -- Clean up
    CLOSE usr_name;
    DEALLOCATE usr_name;';

-- Add USE database statement to change db context
SET @sql = 'USE ?; ' + @sql;
-- Execute the string for each database
EXEC sp_MSforeachDB @sql;


SELECT *
FROM #user_table
ORDER BY LoginName, [Database];

Селект из временной таблички
select distinct [username], [groupname], [database] from #user_table
where groupname in ('db_datawriter','db_owner')
order by groupname
17 фев 15, 15:42    [17277082]     Ответить | Цитировать Сообщить модератору
 Re: Выборка пользователей с правами на изменение.  [new]
o-o
Guest
paag5,

так это ж только датабэйсные роли выдает.
у нас до кучи юзеров имеют индивидуальные insert, update, delete
и ваше творение ни одного из них не выводит,
т.к. они вообще-то датаридеры, но с правами на insert, update, delete в некоторых схемах
17 фев 15, 16:50    [17277605]     Ответить | Цитировать Сообщить модератору
 Re: Выборка пользователей с правами на изменение.  [new]
paag5
Member

Откуда: Москва
Сообщений: 24
o-o
paag5,

так это ж только датабэйсные роли выдает.
у нас до кучи юзеров имеют индивидуальные insert, update, delete
и ваше творение ни одного из них не выводит,
т.к. они вообще-то датаридеры, но с правами на insert, update, delete в некоторых схемах

ну, в моем конкретном случае пт.подошел этот способ, так как индивидуальные роли не раздаются, только роли db.
17 фев 15, 18:34    [17278119]     Ответить | Цитировать Сообщить модератору
 Re: Выборка пользователей с правами на изменение.  [new]
o-o
Guest
paag5,

а почему тогда бы не сформулировать вопрос как "ищу скрипт для получения всех логинов
с их отмапливанием по базам и указанием их ролей в базе"?
вы же это получили.
а в теме другое заявлено,
и первый же ответ от Knyazev Alexey ведет в правильном направлении, а вот ваш в несколько другом
17 фев 15, 18:53    [17278174]     Ответить | Цитировать Сообщить модератору
 Re: Выборка пользователей с правами на изменение.  [new]
paag5
Member

Откуда: Москва
Сообщений: 24
o-o
paag5,

а почему тогда бы не сформулировать вопрос как "ищу скрипт для получения всех логинов
с их отмапливанием по базам и указанием их ролей в базе"?
вы же это получили.
а в теме другое заявлено,
и первый же ответ от Knyazev Alexey ведет в правильном направлении, а вот ваш в несколько другом

согласен с критикой, это больше для моего частного случая подходит, да и не полный список. Не включает в себя сисадминов, например, даже в моем случае.
Задачка срочная стояла, потому как сделал, так сделал.
А над вариантом Алексея завтра поработаю, он более правильный.
17 фев 15, 22:56    [17278850]     Ответить | Цитировать Сообщить модератору
 Re: Выборка пользователей с правами на изменение.  [new]
Glory
Member

Откуда:
Сообщений: 104751
paag5
Задачка срочная стояла, потому как сделал, так сделал.

А зачем для получения списка членов роли нужно выполнять sp_helpuser ?
18 фев 15, 09:24    [17279578]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить