Sql-Server
特定數據庫中使用者的到期日期
我們的一些開發人員需要在短時間內訪問生產中的一些數據庫。有沒有辦法為特定數據庫中的使用者設置到期日期?只是為了澄清我不希望登錄過期,只是特定數據庫中的使用者。
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
bit
orchar(1)
列。在同一數據庫中,創建一個過程以:
- 從表中辨識使用者帳戶已過期的行;
DROP
對於每一行,從指定的數據庫為使用者創建一個動態 SQL 語句- 如果刪除成功,則從表中刪除該行(或將該行標記為
removed
)。如果一次只有幾個,我會簡單地使用STATIC LOCAL
游標來循環記錄;如果數字非常大,您可以生成一個 SQL 語句來一次處理所有帳戶,但這更複雜。注意:如果您不使用預設架構創建使用者,那麼他們最終將擁有與為他們創建的使用者同名的架構。必須先刪除架構或將其移動到其他所有者,然後才能刪除使用者。除非您的使用者需要自己的架構,否則我會將他們分配給數據庫所有者擁有的預設架構(
$$ dbo $$在大多數情況下可能效果很好),所以這不是問題。
- 根據需要從 SQL Server 作業執行此過程(從一天一次到一小時一次,如果合適的話)。
expiration_date
我建議的列是 adatetime
,因此您可以指定到期應該生效的時間,並且在該時間之後的下一次執行應該看到使用者下降。