2012-06-13 15 views
0

我遇到了一個經常性問題,即用戶的TEMPDB中的CREATE SYNONYM權限正在丟失。是否有這些權限似乎永久不變的原因?TEMPDB中用戶的CREATE SYNONYM權限的重複丟失

我得到的錯誤:

> System.Data.SqlClient.SqlException (0x80131904): CREATE SYNONYM 
> permission denied in database 'tempdb' 
+1

tempdb是從頭開始重新創建的sql server重新啓動,不管有什麼不會再存在了 – SQLMenace

回答

1

我離開你的評論,但你可以做的是以下

創建在master數據庫中一個進程,該進程內給予的權限爲tempdb(你可以使用使用tempdb在proc如果你使用動態sql)

然後標記PROC在啓動時運行

exec sp_procoption N'MyProcName', 'startup', 'on' 

現在每次重新啓動SQL Server,該PROC將運行並賦予權限

另請參見List all stored procedures that run at startup in SQL Server

+0

該鏈接是一個體面的解釋,謝謝。 – tbone

0

tempdb數據庫在服務器每次重新啓動時創建的模型數據庫的副本。我的猜測是,當您向用戶授予權限並收到此錯誤消息時,會發生服務器重新啓動。也就是說,您可以授予模型中的權限,並且在服務器重新啓動時它將在tempdb中,或者您可以執行類似於創建啓動存儲過程以授予tempdb中的權限的內容。

+0

re:「在模型中授予權限」 - 您可以擴展一下嗎?我意識到tempdb被擦掉了,但是這個權限也有點混亂;如果我希望用戶在tempdb中永久具有db_ddladmin權限,而不需要在每次重新啓動後重新創建,那麼將在何處授予該權限? – tbone

+0

...從我讀的,如果db_ddladmin被授予modeldb,那麼該權限將被授予所有新創建的數據庫,是正確的?必須有辦法永久設置tempdb權限,而無需在服務器啓動時運行腳本,否? – tbone

+0

你有權利重新:從模型繼承的新數據庫的權限。由於每次服務器啓動時都會重新創建tempdb,因此在這方面行爲不會有所不同。 –