Sql-Server

特定數據庫中使用者的到期日期

  • December 21, 2017

我們的一些開發人員需要在短時間內訪問生產中的一些數據庫。有沒有辦法為特定數據庫中的使用者設置到期日期?只是為了澄清我不希望登錄過期,只是特定數據庫中的使用者。

USE [Database1] 
CREATE USER [Developer1] FOR LOGIN [Developer1] WITH expirydate = '2018.01.01'
--Add some roles
GO
USE [Database2]
CREATE USER [Developer1] FOR LOGIN [Developer1] WITH expirydate = '2018.02.02'
--Add some roles

MSSQL 2014、2016 和 2017

據我所知,沒有辦法為數據庫使用者設置過期日期。

我相信最好的解決方案是Edgar Allan Bayron 的建議:

您可以將 sql server 代理作業設置為每天執行,與今天的日期進行比較。如果該日期等於“到期日期”,則執行一個查詢,它將禁用特定使用者

這是該想法的稍微充實的版本:

  • 創建一個新的數據庫以供管理使用(如果您還沒有)。我們假設它被稱為dba_utilities.

  • dba_utilities數據庫中,創建一個名為 的表db_user_expiration,其中包含database( nvarchar(128))、username( nvarchar(128)) 和expiration_date( datetime) 列(加上id, integer, IDENTITY)。您可能還需要一個removed bitorchar(1)列。

  • 在同一數據庫中,創建一個過程以:

    • 從表中辨識使用者帳戶已過期的行;
    • DROP對於每一行,從指定的數據庫為使用者創建一個動態 SQL 語句
    • 如果刪除成功,則從表中刪除該行(或將該行標記為removed)。如果一次只有幾個,我會簡單地使用STATIC LOCAL游標來循環記錄;如果數字非常大,您可以生成一個 SQL 語句來一次處理所有帳戶,但這更複雜。

注意:如果您不使用預設架構創建使用者,那麼他們最終將擁有與為他們創建的使用者同名的架構。必須先刪除架構或將其移動到其他所有者,然後才能刪除使用者。除非您的使用者需要自己的架構,否則我會將他們分配給數據庫所有者擁有的預設架構(

$$ dbo $$在大多數情況下可能效果很好),所以這不是問題。

  • 根據需要從 SQL Server 作業執行此過程(從一天一次到一小時一次,如果合適的話)。expiration_date我建議的列是 a datetime,因此您可以指定到期應該生效的時間,並且在該時間之後的下一次執行應該看到使用者下降。

引用自:https://dba.stackexchange.com/questions/193613