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