数据库:SQL Server。
我有一个场景,我需要根据工作日向用户授予系统访问权限。
我的意思是假设用户A可以在7天内访问系统 一周,但用户B只能在周一,周三和周五访问系统,用户C只能在周日,周二,周四访问系统。
如何为此方案设计表格?
我设计了一张桌子。
用户:
userId int not null,
userName varchar(25),
userStatus varchar(1)
现在如何实现上述方案?请建议。
答案 0 :(得分:1)
我将使用master数据库中的单个表。表包含用户名(与登录名相同)和他们有权访问的日期
create table usersacess
(
username varchar(30),
accessdays char(10)
)
insert into usersacess
select 'testlogin1','sunday'
union all
select 'testlogin','monday'
union all
select 'testlogin','tuesday'
获得上述信息后,您需要创建一个登录触发器,您也可以选择登录到数据库..
alter TRIGGER connection_limit_trigger
ON ALL SERVER with execute as 'sa'
FOR LOGON
AS
BEGIN
if exists(select 1 from usersacess where username=original_login())
begin
if not exists(select 1 from usersacess where username=ORIGINAL_LOGIN() and accessdays=datename(dw,getdate()))
begin
rollback;
end
end
END;
几点需要注意:
1.with Execute as SA很重要,因为某些登录可能无权读取usersaccess表
创建的原始名称匹配
2.首先确定,我们没有检查所有用户 3. usersacess表中的登录名应与为用户
现在,如果你尝试测试,testlogin1今天只能访问,因为它是星期天