我有兩個模式,一個包含表、存盤程序、一般資料(從現在起將其稱為資料模式)。第二個模式里面只有存盤程序,我們稱之為執行模式。
現在執行模式的重點是我可以創建一個用戶(我們將稱之為外部用戶),該用戶只能訪問此模式并且只能在執行模式中執行存盤程序......沒有選擇,更新,插入、洗掉任何內容(執行模式中無論如何都沒有表)并且對資料模式的訪問為零。這樣,用戶可以做的事情就會受到很大的限制。
關鍵在于,當使用“執行模式”創建存盤程序時,它會根據需要提升用戶權限,而實際上并未向外部用戶提供執行后的任何權限。
一切都很好,我讓它執行并使用測驗存盤程序從資料模式中獲取資料。我現在試圖允許執行模式中的存盤程序之一使用用戶定義的表型別,該表型別已在資料模式上創建。由于無法看到任何資料模式的用戶限制,它被證明是一個問題。
現在我可以重新創建資料型別或將其移動到共享模式......但這是一個實時的舊資料庫,理想情況下我不想重復型別或每次我希望允許訪問時都必須移動用戶定義的內容外部用戶。
所以我想到了使用別名。雖然當我嘗試創建所說的別名時,我收到一個錯誤:
命令:
CREATE TYPE [execute].[udtype1] FROM [data].[udtype1] NOT NULL;
錯誤:
The base type "data.udtype1" is not a valid base type for the alias data type.
雖然我不知道該怎么做,但我注意到微軟檔案創建了一個 utf8string 并參考了它(我希望這意味著我想要做的,可以完成并存在):
CREATE ASSEMBLY utf8string
AUTHORIZATION [dbi]
FROM 0x4D... ;
GO
CREATE TYPE Utf8String
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO
有誰知道如何為用戶定義的表創建別名,或者有其他方法。
uj5u.com熱心網友回復:
參考對原始問題的評論:
Alias data types are for scalar data types, you can't create an alias data type of a table type. You'll need to give explicit access to the types on the schema here so that the USER's can declare a parameter of the type. –
用戶:拉努
他給了我幾個關鍵字,這對我的谷歌搜索很有幫助。
https://docs.microsoft.com/en-us/sql/t-sql/statements/grant-type-permissions-transact-sql?view=sql-server-ver15
盡管如此,這仍然很奇怪,因為我允許執行并且在授予他們特定存盤程序的權限后,我可以洗掉權限并且它可以作業。嘗試首先洗掉權限會導致執行失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394873.html
標籤:sql-server 天蓝色 查询语句 用户定义类型
