Sql 是否授予特定表的数据库权限以及此权限作为安全实践的有效性?

Sql 是否授予特定表的数据库权限以及此权限作为安全实践的有效性?,sql,database,authentication,permissions,grant,Sql,Database,Authentication,Permissions,Grant,我的问题很简单 我可以授予数据库表权限吗?这句话的意思是: 用户管理层有权选择、更新、插入和删除表项目 用户主管有权选择、更新、插入表项目 用户Colaborator有权选择表项目 如果是这样,我可以建立一个系统,根据应用程序的访问级别创建数据库用户,就像上面的示例一样 使用此机制保护应用程序是否有效? 在现实世界的应用程序上值得吗 我在Oracle和MySQL中使用过PHP,但我正在寻找一个与数据库/语言无关的答案,但任何示例都会有用 如果我运气好一点,那么按记录授予许可权呢? 另外,关于

我的问题很简单

我可以授予数据库表权限吗?这句话的意思是:

  • 用户管理层有权选择、更新、插入和删除表项目
  • 用户主管有权选择、更新、插入表项目
  • 用户Colaborator有权选择表项目
如果是这样,我可以建立一个系统,根据应用程序的访问级别创建数据库用户,就像上面的示例一样

使用此机制保护应用程序是否有效?
在现实世界的应用程序上值得吗

我在Oracle和MySQL中使用过PHP,但我正在寻找一个与数据库/语言无关的答案,但任何示例都会有用

如果我运气好一点,那么按记录授予许可权呢? 另外,关于表架构,它们是否比基于表的权限更容易接受?

回答第1部分: 是的,只要你能正确处理回答

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


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

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


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

我明白,在需要更好的安全性的情况下,您认为这是一个很好的折衷方案吗?我认为数据库安全性虽然比应用程序级别更高,更难维护和实施。YMMV。