zoukankan      html  css  js  c++  java
  • mysql系统表加trigger和对特定的库禁用 DDL 语句

    给 mysql 系统表加上 trigger

    默认情况下,mysql 是不能给系统表,例如 mysql.user 加上触发器的。会提示

    ERROR 1465 (HY000): Triggers can not be created on system tables

    但是还是可以有办法绕过这个限制。

    在其他 db 里另外建一个结构名字一样的表,例如

    create table test.user like mysql.user

    然后在那个表上建好触发器。这样会在数据库目录中生成 “表名.TRG” 文件。把这个文件拷贝到 mysql 库的目录中,确认访问权限没问题后,重启一下 mysql ,触发器就可以生效了。

    在 mysql 中对特定的库禁用 DDL 语句

    mysql 的权限控制功能虽然已经比较强大,但是是基于白名单规则,所以没法做到对除某某库,如 mysql 库以外的所有库分配权限,或者说单独禁用某个库的某些权限。虽然可以一个个库地分配,但是这样毕竟麻烦,尤其是在库的数量会动态变化的情况下。

    对于 DDL 语句,也就是 create 、alter 、drop 之类,有一个特殊的办法可以做到。其实也很简单,去掉那个库所在的目录的写权限即可。例如:

    chmod a-w mysql
    

    之后,在 mysql 库上执行任意 DDL 语句都会出错。

    这方法看着挺恶心,不过也没找到更好的解决办法。

     

  • 相关阅读:
    爬虫
    modelform
    验证码
    ajax
    ngnix和负载均衡
    django 补充和中间件
    django补充和form组件
    C常量与控制语句
    Web应用开发技术(3)-html
    Web应用开发技术(2)-html
  • 原文地址:https://www.cnblogs.com/simplelogic/p/3488407.html
Copyright © 2011-2022 走看看