Azure SQL Server - 如何为用户提供对主数据库

时间:2017-03-06 17:28:28

标签: sql-server azure azure-sql-database

对于我正在使用Azure SQL的项目,为了在Web应用程序中使用,我创建了一个用户'justread',在数据库中的一个模式上获得了select - access。

我用经典的方式做了这个,分2步:

  1. 在主数据库

    if exists(select * from sys.database_principals where name = N'justread')
      begin
        drop user [justread]
        drop login [justread]
      end
    go
    if not exists (select * from sys.database_principals where name = N'justread')
      begin 
        create login [justread] with password= N'123456'
      end
    go
    
  2. 在应用程序数据库

    create user [justread] for login [justread] with default_schema=[dbo]
    go
    grant select on schema::dbo to [justread]
    go
    
  3. 在应用程序数据库上,这很好用,但是,我收到了允许同一用户只读访问master数据库的请求。

    不要问我为什么......

    我首先通过分配访问权限来尝试它,就像我在应用程序数据库中所做的那样:

    create user [justread] for login [justread] with default_schema=[dbo]
    go
    grant select on schema::dbo to [justread]
    go
    

    第一个查询有效,没问题。但第二次失败,出现以下错误:

    Msg 15151, Level 16, State 1, Line 5
    Cannot find the schema 'dbo', because it does not exist or you do not have permission.
    

    我尝试使用Google搜索,发现它是如何使用经典SQL Server完成的,但我也收到了错误消息:

    grant view server state to [justread]
    go
    
    Msg 40520, Level 16, State 1, Line 4
    Securable class 'server' not supported in this version of SQL Server.
    

    我该如何完成这项工作?

3 个答案:

答案 0 :(得分:0)

首先,您是否要在master数据库中创建表并在这些表上授予'justread'用户权限?如果是这种情况,我们将无法在Azure SQL中的master数据库中创建表。 Azure SQL中的主数据库是只读的,它可以保存有关角色,登录等信息。

但是,如果要在Azure SQL中为master数据库的系统表授予“justread”用户权限,只需在master数据库中执行以下脚本即可。我测试过程,justread用户可以在执行下面的脚本后访问master数据库的系统表。

create user [justread] for login [justread] with default_schema=[dbo]
 Go

其次,根据此official article,VIEW SERVER STATE当前不是Azure SQL支持的概念,因此在运行以下脚本时会收到错误消息。

 grant view server state to [justread]
go

答案 1 :(得分:0)

创建用户[justread]是为了在我的应用程序的数据库上执行简单的数据查询。由于我不知道的原因,客户端还需要此用户具有对#34; Master"的读取权限。数据库中。

使用以下查询,我设法为[justread]提供所需的访问权限,因此我可以在master数据库上执行查询。



create user [justread] for login [justread] with default_schema=[dbo]
Go




有些表似乎仍然无法访问,但以下错误消息似乎表明:

enter image description here

目前,这可能就足够了。

答案 2 :(得分:0)

以下是我如何向外部用户(在Azure AD中)授予对我的数据库的只读权限:

CREATE USER [externaluser] FROM  EXTERNAL PROVIDER  WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE db_datareader ADD MEMBER [externaluser]
GO

相关文章: