0

我的问题很简单。

我可以明智地授予数据库表的权限吗?行中的一些东西:

  • 用户管理有权对表 Projects 进行选择、更新、插入和删除
  • 用户主管有权选择、更新、插入表项目
  • 用户 Colaborator 有权在表 Projects 上进行选择

如果是这样,我可以设置一个系统来根据我的应用程序的访问级别创建数据库用户,就像上面的示例一样。

使用它来保护应用程序是一种有效的机制吗?
在现实世界的应用程序中是否值得?

我已经将 PHP 与 Oracle 和 MySQL 一起使用,但我正在寻找与数据库/语言无关的答案,但任何示例都会很有用。

有点碰运气,每个记录的权限授予怎么样?另外,表模式呢,它们比基于表的权限更容易接受吗?

4

2 回答 2

1

使用数据库安全性的主要问题是您需要为每个用户单独连接,而不是能够使用“服务用户”来连接从应用程序服务器到数据库服务器。这意味着您将不再能够使用数据库连接池,必须为每个用户请求“连接”和“断开”数据库,这不是很有效,因为连接相对昂贵。

话虽如此,在数据库中使用单独的用户是有充分理由的,例如 DATA_USER(应用程序服务器连接的用户)和 DATA_OWNER(拥有所有表但仅用于数据库维护)然后只授予 DATA_USER 权限它需要,例如仅在查找表上选择。通过分离 DATA_USER 和 DATA_OWNER,您可以增加对应用程序不会发出 DDL 命令(例如删除表)的信心。

于 2012-04-13T12:13:48.323 回答
1

对第 1 部分的回答:是的,只要您正确处理响应。

第 2 部分:它不如在应用程序层实现安全性,因为大多数应用程序都需要解决方案的灵活性(如果您希望用户获得更多的权限,必须编写大量的更改/拒绝/授予脚本)

第 3 部分:(从纯 MSSQL 讲)行级权限是不可能的。为此目的创建自定义视图。

于 2012-04-13T03:24:23.287 回答