SQL Server 表分区授权

问题描述

能否给予基于分区的用户权限?是否可以进行基于分区的用户授权?我们可以在 sql Server 中进行基于分区的授权,而不是基于表的授权吗?

例如;您将 1 个表定义为包含 5 个分区。然后我们要为这些分区定义不同的用户权限。这可能吗?

解决方法

本机不存在此功能,但您可以通过基于数据的视图来实现。

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',('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 表中特定国家/地区数据的明确授权。只要您的用户无法查询基表,这应该可行。