2009-05-26 58 views
0

我有我的应用程序与访问控制列表(这些都是表/架构/对象)的用户。目前这些都是从数据库中读取的,布尔值用于指示他们可以查看/处理的内容。但是,任何人仍然可以访问数据库并更改数据。有人可以提供一些我可以做什么样的事情的建议吗?我希望我清楚我们有用户(uname + pass)和acl(empui_access,empdat_manipulate)。通过代码等所有还挺安全解决方案......针对数据库中访问控制列表的安全设计建议?

+0

您使用的数据库是? SQL Server? MySQL的?甲骨文?有很多不同的权利吗?很多用户?每个权利有不同的访问级别? – DonkeyMaster 2009-05-26 10:40:44

+0

数据库我不用担心任何与编码设计有关的任何问题。 – abmv 2009-05-26 11:00:17

回答

0

喜欢的东西

table users 
username: string 
password_hash: hex 
acl: bit array 

的用户名是用户名,password_hash是密码的散列,用一粒盐。存储一个简单的密码是错误的,但您已经知道,不是吗?

ACL被声明为字符串,但用作位数组。 每一位代表一定的权限。 1表示用户有权限,0表示他没有权限。要检查某个位的值,可以在acl上按位进行操作。如果结果不为零,则授予访问权限。如果结果为零,则访问被拒绝。

例如:

// permission to read employee data 
public const long READ_EMPL_DATA = 0x01 

... 
{ 
    User user = database.GetSomeUser(); 
    // test for READ_EMPL_DATA permission 
    if (0 != (user.ACL & READ_EMPL_DATA)) { 
     // access granted 
    } else { 
     // access denied 
    } 
    // give READ_EMPL_DATA permission 
    if (0 != (user.ACL & READ_EMPL_DATA)) 
     user.ACL = user.ACL & READ_EMPL_DATA 
} 

要添加组的支持,加入一对表。

table group 
groupname: string 
acl: bit array 

table user_group 
user_id: id 
group_id: id 

除了测试用户级权限之外,还测试用户所属的组。当然,你会写一些帮助函数,也许是一个存储过程。

我希望这能让你开始。如果没有,我可以给你一个更具描述性的例子,或更多的实际代码或其他帮助。

-1

这是特定于PostgreSQL,但您可能从Veil得到一些好主意。