【问题标题】:Defining user roles in Database在数据库中定义用户角色
【发布时间】:2014-05-13 18:29:31
【问题描述】:

我正在开发一个网络应用程序,该应用程序将由我所在城市的几所大学共享。文员和办公室工作人员的累计人数将在几万左右。

我创建了“admission clerk”、“account staff”等用户,并定义了每种用户类型可以访问的表(比如“admission clerk”只能访问 admission_table 而不能访问 payment_table)。

我实施了程序化安全措施,当大学的招生办事员登录时,他可以删除 admission_table 中 student_college 字段等于 admission_clerk 组织的条目。我可以通过在 dbms 中创建用户来达到同样的目的吗?

【问题讨论】:

  • 您已经标记了mysqlsql-server。您的问题是在一般意义上提出的(适用于多个 rdbms)吗?还是您只要求一个 rdbms?
  • 我认为它属于 SQL 标准。如果没有,我宁愿将其标记为 mysql

标签: mysql sql sql-server rdbms user-roles


【解决方案1】:

MySQL 不支持行级安全性。您可以通过使用视图来解决此问题,但这会带来某些怪癖。我建议坚持在应用程序级别实施行级安全性。

【讨论】:

    【解决方案2】:

    您可以尝试将 admission_tables 相乘以得到一个主表 admission_table 与列

    id, college_code, reference_id
    

    最后一个字段引用了大学的 admission_table

    因此,您将拥有多个具有相同结构的admission_table_,每个学院单独一个。

    因此您可以使用表角色。

    这是一种复杂的方式,您无法汇总多个表数据,但它可以工作。

    更新

    或者,您可以防止从表中删除并创建一个特殊的secured_delete() 存储过程。所以录取文员1不能直接删除,只能调用secured_delete_college1()(移自评论)

    【讨论】:

    • 为每所新大学创建一个表是一种好习惯吗?另外,我正在寻找在这种情况下在企业中完成的实践。如果这是商业上的方式,我将坚持应用逻辑中的行级控制
    • 这不是很好的做法,但您的要求也不是 MySQL 的通常要求。
    • 另外,您可以防止从表中删除并创建一个特殊的secured_delete() 存储过程。所以录取文员1不能直接删除,只能调用secured_delete_college1()
    • 为什么不常见?一堆电子商务网站,例如 ebay,供应商在 ebay 上注册并且只能控制他们在表格中拥有的东西。它是在数据库级别还是应用程序逻辑级别实现的?我的情况类似
    • 您在不支持该功能的情况下使用 MySQL。电子商务网站可以在应用级别支持此功能或使用其他数据库
    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 2014-03-30
    • 2015-01-22
    • 2016-04-23
    • 2012-04-24
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多