根据用户访问权限识别表的架构

时间:2019-08-22 13:04:50

标签: sql sql-server tsql stored-procedures azure-sql-database

我有一个场景,其中有两个数据库 模式:Schema1和Schema2,以及表:Table1。

在Schema1.Table1和Schema2.Table1之类的两个模式中都存在相同的Table1。

现在我们有一些存储过程,这些存储过程将位于另一个Schema中,即Schema3。

CREATE PROCEDURE SCHEMA3.GETDETAILS ( 
          @AS_CODE_TYPE VARCHAR(1) , 
          @AS_OUT_FIELD1 VARCHAR(50) OUT ,
         @AS_RETURN_VAL INTEGER OUT 
                  ) 
AS
BEGIN 

    SELECT @AS_OUT_FIELD1 = [EXTERNALREFKEY] FROM TABLE1 WHERE CODE_TYPE = @AS_CODE_TYPE 

    IF @AS_OUT_FIELD1 <> ' ' 
    BEGIN 
        SET @AS_RETURN_VAL = 1 ; 
    END
    ELSE 
    BEGIN 
        SET @AS_RETURN_VAL = - 1 ; 
    END   
END  

现在我的问题:

如何获取给定用户的架构详细信息。

我是否需要修改SP,以根据用户对特定模式的访问权限将模式动态地追加到表中。

请帮助

1 个答案:

答案 0 :(得分:0)

在创建用户时,如果您未指定其架构,则它将具有默认架构'dbo'。

您可以通过在master DB中运行以下查询来获取用户架构:

USE master;
SELECT s.name user, s.default_schema_name user_schema FROM sys.database_principals s 
WHERE s.name='user'
GO

例如:

enter image description here

如果有权限,您还可以更改用户架构。

有关更多详细信息,请Changing the default schema of a user

ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;  
GO  

希望这会有所帮助