我有一個TSQL腳本,用於設置數據庫作爲我產品安裝的一部分。它需要幾個步驟,總共需要五分鐘左右的時間。有時候這個腳本在最後一步失敗,因爲運行腳本的用戶沒有足夠的數據庫權限。在這種情況下,我希望劇本能夠將海峽癱瘓。要做到這一點,我希望腳本能夠測試它有什麼權利。任何人都可以通過一種通用的測試方式指出腳本是否正在運行特定的安全權限?SQL Sever TSQL腳本如何知道它具有哪些安全權限?
編輯:在特定情況下,我正在考慮它正在試圖做一個備份,但我有其他事情出錯了,並希望有一個通用的解決方案。
我有一個TSQL腳本,用於設置數據庫作爲我產品安裝的一部分。它需要幾個步驟,總共需要五分鐘左右的時間。有時候這個腳本在最後一步失敗,因爲運行腳本的用戶沒有足夠的數據庫權限。在這種情況下,我希望劇本能夠將海峽癱瘓。要做到這一點,我希望腳本能夠測試它有什麼權利。任何人都可以通過一種通用的測試方式指出腳本是否正在運行特定的安全權限?SQL Sever TSQL腳本如何知道它具有哪些安全權限?
編輯:在特定情況下,我正在考慮它正在試圖做一個備份,但我有其他事情出錯了,並希望有一個通用的解決方案。
select * from fn_my_permissions(NULL, 'SERVER')
這給你的權限列表當前會話具有服務器
select * from fn_my_permissions(NULL, 'DATABASE')
這給了你當前數據庫上當前會話的權限列表上。
我認爲這是一個更新失敗或插入一長串選擇後。
只需嘗試一個簡單更新或插入事務內部。硬編碼的行ID,或任何使它簡單和快速。
不要提交交易 - 而是將其回滾。
如果您無權執行插入或更新操作,則應該失敗。如果你這樣做,它會回滾,不會導致永久性的變化。
嘗試最後插入/更新了前面一些地方條件像
insert/update
where 1=2
if (@@error <> 0)
raise error 6666 'no permissions'
這不會造成任何傷害,但會提高前期對缺乏權利的標誌。
在特定的情況下,我正在考慮它正在嘗試做備份,但我有其他事情出錯,並希望有一個通用的解決方案。 – 2009-02-02 16:07:35
啊....嗯。那會更棘手一些。 – BradC 2009-02-02 16:17:07