首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server表分区授权

问SQL Server表分区授权
EN

Stack Overflow用户
提问于 2021-06-24 18:02:48
回答 1查看 56关注 0票数 0

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

例如,您定义了一个由5个分区组成的表。然后,我们希望为这些分区定义不同的用户权限。这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-06-25 01:02:01

该功能并不是本机提供的,但您可以通过在数据上显示视图来实现此功能。

代码语言:javascript
复制
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表中的特定国家/地区的数据。只要您的用户没有查询基表的能力,这应该是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68113638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档