我应该如何在数据库中表示唯一的超级管理员权限?

时间:2010-08-18 04:44:00

标签: database relational-database

我的项目需要有一些管理员,其中只有一个管理员具有超级管理员权限。

在数据库中表示这个的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点。

编号1:在您的管理员(或用户)表上有一个名为IsSuperAdmin的列,并且有一个插入/更新触发器,以确保在任何给定时间只有一个列设置。

2号:表格中有TimestampWhenMadeSuperAdmin列。然后,在您的查询中找出它是谁,使用类似:

select user_id from users
where TimestampWhenMadeSuperAdmin is not null
order by TimestampWhenMadeSuperAdmin desc
fetch first 1 row only;

Number 3/4:将SuperAdmin用户ID放入一个单独的表中,使用数字1或2的触发器或最后一个人制造的电源方法。

就个人而言,我喜欢数字2,因为它可以为您提供所需而无需不必要的触发器,有一个关于谁在任何给定时间有权力的审计线索(尽管不是一个完整的审计线索,因为它只存储最近有人成为SuperAdmin的时间。

如果你只是清除当前的SuperAdmin,那么1号的问题是该怎么办。要么你必须把力量给别人,要么没有人拥有它。换句话说,你可以让自己陷入没有SuperAdmin的境地。而数字3和4只是使用额外的表格使事情变得复杂。

答案 1 :(得分:2)

使用角色/组方法。您有一个包含所有可能角色的表,然后您有一个 intersect 表,其中包含用户的密钥和他们所属角色的密钥(每个用户可以有多个条目作为每个用户可能有几个角色(或属于几个小组))。

此外,请不要将它们称为超级管理员 - 只需 admin 即可,请致电其余的超级用户或类似内容。

答案 2 :(得分:0)

简单但有效:UserId = 1.您的应用程序将始终知道它是超级用户。