Надання тимчасових прав за допомогою SQL Server Agent Jobs, Інші СУБД, Бази даних, статті

Досить поширена ситуація – користувачеві терміново потрібно отримати деякі дані для звіту; в “нормального життя” він не має прав проглядати ці дані безпосередньо, але в даний момент, наприклад, його колега (який має відповідні права), у відпустці, звіт потрібен вже вчора, все в паніці …

Що робить у такій ситуації адміністратор? Ну, наприклад, він надає даному користувачеві права на перегляд даних і записує собі на папірці: “Скасувати права Васі переглядати річний звіт”. Далі все просто – папірець втрачається, Вася на віки залишається з правами, які йому не покладаються.

Є спосіб дати користувачеві тимчасові права, які автоматично будуть спливати в певний  час.

Припустимо, у нас є користувач Bob і процедура p_test, яку йому терміново потрібно виконати. Скористаємося SQL Server Agent Jobs. Ви даєте користувачеві права на виконання цієї процедури (GRANT EXECUTE ON p_test TO Bob) І створюєте Job, Який буде виконуватися один раз в призначений час, і буде скасовувати права користувача на виконання.

Створити Job можна через UI SQL Server Management Studio (SQL Server Agent -> Jobs -> New Job…) або програмно. Наприклад, наступний скрипт створює Job для скасування права користувача Bob виконувати процедуру p_test і програмує її виконання (створює Schedule) Один раз 10.06.2009 в 23:59:59

DECLARE @jobId BINARY(16)

EXEC msdb.dbo.sp_add_job @job_name=N”RevokeTempPerm”,

            @enabled=1,

            @notify_level_eventlog=0,

            @notify_level_email=0,

            @notify_level_netsend=0,

            @notify_level_page=0,

            @delete_level=0,

            @description=N”To revoke temporary permissions”,

            @category_name=N”[Uncategorized (Local)]”,

            @owner_login_name=N”sa”, @job_id = @jobId OUTPUT

 

EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N”RevokeTempPerm”,

            @step_id=1,

            @cmdexec_success_code=0,

            @on_success_action=1,

            @on_success_step_id=0,

            @on_fail_action=2,

            @on_fail_step_id=0,

            @retry_attempts=0,

            @retry_interval=0,

            @os_run_priority=0, @subsystem=N”TSQL”,

            @command=N”REVOKE EXECUTE ON p_test TO Bob”,

            @database_name=N”db_source”,

            @flags=0

 

EXEC msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N”RevokeTempPerm”,

            @enabled=1,

            @freq_type=1,

            @freq_interval=0,

            @freq_subday_type=0,

            @freq_subday_interval=0,

            @freq_relative_interval=0,

            @freq_recurrence_factor=0,

            @active_start_date=20090610,

            @active_end_date=99991231,

            @active_start_time=0,

            @active_end_time=235959,

            @schedule_uid=N”0882904e-9eaa-46ee-b8f2-ccfb56b88492″

 

EXEC msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N”(local)”

GO

Аналогічно можна створювати Job автоматично надає певні права користувачам в певний час.

Побічним ефектом такого методу є те, що з часом такі Job “s можуть накопичуватися. Відповідно, можна буде створити процедуру виконуються час від часу і видаляє прострочені Job, або переіспользовать  їх міняючи графік їх виконання (Schedule).

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*