数据库:SQL Server。
我有一个场景,我需要根据周天数向用户授予系统访问权限。
我的意思是,假设用户a可以在但是用户B只能在星期一、星期三和星期五访问系统,而用户C只能在星期日、星期二、星期四访问系统。
如何为这种情况设计表格?
我设计了一张桌子。
用户:
userId int not null,
userName varchar(25),
userStatus varchar(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.将Execute作为SA很重要,因为有些登录名可能没有读取用户访问表的权限
2.首先存在确保我们不会检查所有用户
3.用户访问表中的登录名应与为用户创建的原始名称相匹配
现在,如果您尝试测试,testlogin1只能在今天访问,因为这是周日