是否可以授予基于分区的用户权限?基于分区的用户授权可能吗?我们能否在SQL Server中进行基于分区的授权,而不是基于表的授权?
例如,您定义了一个由5个分区组成的表。然后,我们希望为这些分区定义不同的用户权限。这个是可能的吗?
发布于 2021-06-25 01:02:01
该功能并不是本机提供的,但您可以通过在数据上显示视图来实现此功能。
USE tempdb;
CREATE USER UserA WITHOUT LOGIN;
CREATE USER UserB WITHOUT LOGIN;
CREATE TABLE dbo.CountryAuthorization (
ISOCountryCode CHAR(2) NOT NULL,
AuthorizedUser sysname NOT NULL,
CONSTRAINT PK_CountryAuthorizations PRIMARY KEY (AuthorizedUser, ISOCountryCode)
);
CREATE TABLE dbo.CountryData (
ISOCountryCode CHAR(2) NOT NULL,
Nonce VARCHAR(100) NOT NULL CONSTRAINT DF_CountryData__Nonce DEFAULT REPLICATE('x', 50)
);
GO
CREATE VIEW dbo.vw_CountryData
AS
SELECT d.*
FROM dbo.CountryData AS d
JOIN dbo.CountryAuthorization AS a
ON a.ISOCountryCode = d.ISOCountryCode
WHERE a.AuthorizedUser = USER_NAME();
GO
GRANT SELECT ON dbo.vw_CountryData TO PUBLIC;
INSERT INTO dbo.CountryAuthorization
(
ISOCountryCode,
AuthorizedUser
)
VALUES
('US', 'UserA'),
('CA', 'UserA'),
('US', 'UserB');
INSERT INTO dbo.CountryData
(
ISOCountryCode
)
VALUES
('US'),
('CA');
EXECUTE AS USER = 'UserA'
SELECT *
FROM dbo.vw_CountryData;
REVERT;
EXECUTE AS USER = 'UserB'
SELECT *
FROM dbo.vw_CountryData;
REVERT;这里的想法是,显式授权用户访问视图检查的dbo.CountryAuthorization表中的特定国家/地区的数据。只要您的用户没有查询基表的能力,这应该是可行的。
https://stackoverflow.com/questions/68113638
复制相似问题