【问题标题】:Granting read only access to a view in user-defined database in SQL Azure在 SQL Azure 中授予对用户定义数据库中视图的只读访问权限
【发布时间】:2015-05-28 05:43:24
【问题描述】:

我在 SQL Azure 数据库中有一个名为“cust_view”的视图。

我的目标是让我的应用程序的最终用户以只读方式访问应用程序数据库中的某些数据,这样他们就可以通过直接连接到 SQL Server Management Studio 中的应用程序数据库或其他方式从他们这边运行他们的临时查询其他商业智能工具。

问题在下面给出的 T-SQL 脚本中,是否有一些语句不需要达到这个目标?

--connect to master database from SSMS.
CREATE LOGIN [readonly] WITH PASSWORD=N'61*4#@amz'
GO


--connect to user database
CREATE USER [readonly] FOR LOGIN [readonly]
GO

EXEC sp_addrolemember 'db_datareader', 'readonly'
GO


CREATE VIEW cust_view
   AS
   SELECT * FROM Calls;//add whatever other join you would like to expose more data from related tables
GO

GRANT SELECT ON cust_view TO [readonly]
GO

【问题讨论】:

    标签: azure-sql-database login-script


    【解决方案1】:

    考虑为您的应用使用contained database user,而不是登录名和用户。一般来说,这是 Azure SQL 数据库的推荐方法:您可以获得更好的性能,因为应用程序可以直接向用户数据库进行身份验证,而无需额外往返主数据库。

    另外,如果您只希望应用能够从 cust_view 中进行选择,请不要将用户添加到“db_datareader”角色。此角色允许用户对数据库中的任何表或视图运行 SELECT 语句,而不仅仅是您的视图。相反,只需在您的视图上授予 SELECT 权限即可。

    网络:

    CREATE USER [readonly] WITH PASSWORD = 'strong_password'
    go
    
    -- create your view
    
    GRANT SELECT ON cust_view TO [readonly]
    go
    

    【讨论】:

    • CREATE USER 语句将针对用户定义的数据库或主数据库运行吗?
    • 针对用户数据库
    • 我发现在 SQL Azure 中默认没有启用这个包含的数据库用户。在我们的例子中,它不是。所以,我必须创建一个 LOGIN 来创建一个用户。
    【解决方案2】:

    Sunil,包含数据库用户身份验证在 Azure SQL 数据库 V12 中始终处于启用状态。 V11 没有。

    回到原来的问题,

    EXEC sp_addrolemember 'db_datareader', 'readonly'
    GO
    

    基本上相当于将 SELECT 授予数据库中的每个对象。对于最低权限,只需要您的 GRANT 语句:

    GRANT SELECT ON cust_view TO [readonly]
    GO
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-03
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多