gpt4 book ai didi

sql - 授予一天中特定时间的权限

转载 作者:行者123 更新时间:2023-12-03 02:53:54 25 4
gpt4 key购买 nike

是否可以授予用户权利,例如公司的营业时间。

GRANT SELECT 
ON client
<WHERE CONDITION>
TO Emily

我知道类似的事情可以使用 MySQL 来完成,您可以在授予选项中添加一个 WHERE 子句,以便您可以向其添加上下文条件。但是,我正在使用 MS SQL Server,可以在那里完成吗?

另一个解决方案是添加一个 SQL 作业来添加和删除特定时间的权限,但我不太喜欢这样做,我更愿意在授予级别上执行此操作。

最佳答案

我喜欢@Turo使用 View 的建议。

它可能只包含类似的内容

CREATE VIEW dbo.TimeFilteredClient
AS
SELECT *
FROM dbo.Client
WHERE CAST(GETDATE() AS TIME) BETWEEN '09:00' AND '17:00'

然后授予 Emily 对 View 而不是表的权限。只要 View 和表共享相同的所有者,她就可以从 View 中进行选择,但在指定时间之外不会得到任何结果。

如果您是 2016 年,您还可以使用 row level security在桌面上实现几乎相同的事情。下面的例子

CREATE TABLE dbo.Client
(
clientId INT IDENTITY PRIMARY KEY,
Name VARCHAR(50)
);

INSERT dbo.Client
VALUES ('client1'),
('client2');

CREATE USER Emily WITHOUT LOGIN;

GRANT SELECT ON dbo.Client TO Emily;

GO

CREATE SCHEMA Security;

GO

CREATE FUNCTION Security.EmilyTimeFilterPredicate()
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
SELECT 1 AS fn_securitypredicate_result
WHERE USER_NAME() <> 'Emily'
OR CAST(GETDATE() AS TIME) BETWEEN '09:00' AND '17:00';

GO

CREATE SECURITY POLICY EmilyTimeFilter
ADD FILTER PREDICATE Security.EmilyTimeFilterPredicate()
ON dbo.Client
WITH (STATE = ON);

GO

EXECUTE AS USER = 'Emily';

SELECT *
FROM dbo.Client;

REVERT;

SELECT *
FROM dbo.Client;

GO

DROP SECURITY POLICY EmilyTimeFilter ;

DROP TABLE dbo.Client

DROP USER Emily

DROP FUNCTION Security.EmilyTimeFilterPredicate

DROP SCHEMA Security;

关于sql - 授予一天中特定时间的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44862152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com