我有一個SQL Server 2005上運行的數據庫,它具有用戶定義的數據類型。用戶定義的數據類型也在模型數據庫中實現,所以當我創建臨時表時,我可以使用相同的用戶定義數據類型。SQL Server 2005用戶定義的數據類型,tempdb和權限
例如,在AppDB我有這樣的數據類型定義:
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL
,並在型號完全相同的:
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL
我發現,如果我的數據庫實例的安全登錄有sysadmin服務器角色,那麼用戶在使用product_code數據類型調用在tempdb中創建表的存儲過程時沒有問題 - 但是如果我從應用程序安全登錄中刪除了sysadmin,那麼存儲過程調用將失敗。
如果我始終用varchar系統數據類型替換用戶定義的數據類型,那麼相同的存儲過程調用會成功。
出於安全原因,我不想將sysadmin服務器角色添加到應用程序安全登錄名 - 如果我想繼續使用用戶定義的數據類型,我有什麼選擇?這些選項是否隨着SQL Server 2008而改變?
具體來說,除了那些授予public角色的權限之外,還需要什麼權限?需要編輯所有存儲過程的答案將被視爲無響應。
用戶在AppDB中擁有什麼權限?例如他們可以用這種數據類型創建一個* local *表嗎? – 2012-03-04 19:52:07
此外,您可能會發現這篇博文很有用。從長遠來看,圍繞你的類型的文檔將比使用別名類型強制執行它的麻煩少得多。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/14/bad-habits-to-kick-using-alias-types.aspx – 2012-03-04 20:02:48
感謝您的文章鏈接 - 我已轉發此給我們的系統架構師進行審查。我剛剛將用戶添加到了db_ddladmin固定用戶角色,問題已解決 - 這是正確的做法嗎?我認爲這比將用戶添加到系統管理員角色更好 - 但我承認我對這個東西不太瞭解。 – 2012-03-04 21:06:57