微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server 表分区授权

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。