根据星期几授予用户系统访问权限

时间:2016-03-27 10:53:16

标签: sql sql-server

数据库:SQL Server。

我有一个场景,我需要根据工作日向用户授予系统访问权限。

我的意思是假设用户A可以在7天内访问系统 一周,但用户B只能在周一,周三和周五访问系统,用户C只能在周日,周二,周四访问系统。

如何为此方案设计表格?

我设计了一张桌子。

用户

userId int not null,
userName varchar(25),
userStatus varchar(1)

现在如何实现上述方案?请建议。

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今天只能访问,因为它是星期天