0

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

4

2 回答 2

0

就像是

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

username 是用户名,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

除了测试用户级别的权限外,还要测试用户所属的组。当然,您将编写一些辅助函数,也许是一个存储过程。

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

于 2009-05-26T10:54:21.290 回答
-1

这是 PostgreSQL 特有的,但您可能可以从Veil获得一些好主意。

于 2009-05-26T14:30:38.890 回答