授予对 SQL Azure 中用户定义数据库中视图的只读访问权限

Granting read only access to a view in user-defined database in SQL Azure

我在 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

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

此外,如果您只希望应用程序能够从 cust_view select,请不要将用户添加到 'db_datareader' 角色。此角色允许用户针对数据库中的任何 table 或视图 运行 一个 SELECT 语句,而不仅仅是您的视图。相反,只需在您的视图上授予 SELECT,仅此而已。

净值:

CREATE USER [readonly] WITH PASSWORD = 'strong_password'
go

-- create your view

GRANT SELECT ON cust_view TO [readonly]
go

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

回到原来的问题,

EXEC sp_addrolemember 'db_datareader', 'readonly'
GO

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

GRANT SELECT ON cust_view TO [readonly]
GO