【问题标题】:Read only table in mysqlmysql中的只读表
【发布时间】:2016-06-17 12:58:09
【问题描述】:

我正在使用 mysql 数据库。我有一个名为tbl_user 的表,我需要将其更改为每个用户的只读表。如何将表格更改为只读?

【问题讨论】:

  • 为什么需要一个任何用户都无法更改或编辑的表格? :D
  • @Terry Seidler 这是一个包含我的应用程序登录凭据的表。

标签: mysql database


【解决方案1】:

要授予所有用户选择权限,请使用 public 而不是完整的用户列表

REVOKE ALL ON tbl_user FROM PUBLIC
GRANT SELECT ON tbl_user TO PUBLIC

【讨论】:

  • 记住GRANT OPTION。 ALL 不要删除GRANT 权限。
【解决方案2】:

除了撤销权限,还有一种方法是使用触发器

/* triggers */
delimiter //

DROP TRIGGER IF EXISTS stop_table_insert;
CREATE TRIGGER stop_table_insert
  BEFORE INSERT ON `table`
FOR EACH ROW
BEGIN
   SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance';
END;//

DROP TRIGGER IF EXISTS stop_table_update;
CREATE TRIGGER stop_table_update
  BEFORE UPDATE ON `table`
FOR EACH ROW
BEGIN 
   SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance';
END;//

DROP TRIGGER IF EXISTS stop_table_delete;
CREATE TRIGGER stop_table_delete
  BEFORE DELETE ON `table`
FOR EACH ROW
BEGIN
   SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance';
END;//


delimiter ;

【讨论】:

  • 这个适合我,谢谢王老师^-^
【解决方案3】:

使用REVOKEcommand 并撤销用户对该表的 INSERT / UPDATE / DELETE 权限

REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...

参考Documentation

【讨论】:

    【解决方案4】:

    您需要为所有用户 REVOKE 更新/修改/GRANT 权限并添加 SELECT。

    REVOKE ALL ON readonly_table FROM tbl_user ;
    GRANT SELECT ON readonly_table TO tbl_user;
    

    如果用户在 readonly_table 上有授权选项,请执行以下操作:

    REVOKE GRANT OPTION ON readonly_table FROM tbl_user;
    

    了解The MySQL Access Privilege SystemREVOKE documentation

    【讨论】:

      【解决方案5】:
      GRANT SELECT ON tbl_user TO user;
      GRANT SELECT, INSERT, UPDATE, DELETE ON tbl_user TO user;
      

      【讨论】:

        猜你喜欢
        • 2013-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 2012-06-04
        • 1970-01-01
        • 2016-05-28
        • 2017-07-15
        相关资源
        最近更新 更多