如何解决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 举报,一经查实,本站将立刻删除。