protected_databases¶
protected_databases系统变量指定一个逗号分隔的数据库名称列表,这些数据库的 DROP 及 其他破坏性 DDL/DML 操作对非管理员用户受保护。一旦某个数据库被列入protected_databases,非accountadmin或sys角色的用户将无法删除该数据库、在其 中创建对象或修改其数据。这为防止关键数据库的意外或未授权破坏提供了一道防线。
protected_databases 系统变量是一个仅全局级别的设置,定义哪些数据库对普通用户的 DROP
DATABASE、DDL 修改和数据操作受保护。只有管理员用户可以修改受保护的数据库或更改
protected_databases 列表。该变量在生产环境中很有用,可防止重要数据库被意外删除。
语法¶
SET GLOBAL protected_databases = ‘db1,db2,db3’;
查询当前值:
SHOW VARIABLES LIKE ‘protected_databases’; SELECT @@global.protected_databases;
参数说明¶
属性 |
值 |
|---|---|
变量类型 |
|
作用域 |
|
是否动态 |
是 |
默认值 |
|
可选值 |
逗号分隔的数据库名称 |
示例¶
DROP DATABASE IF EXISTS protected_demo;
CREATE DATABASE protected_demo;
USE protected_demo;
CREATE TABLE t1(a INT PRIMARY KEY, b INT);
INSERT INTO t1 VALUES (1, 1);
SET GLOBAL protected_databases = 'protected_demo';
SELECT @@global.protected_databases;
SELECT a FROM t1;
SET GLOBAL protected_databases = 'unused_value';
DROP DATABASE protected_demo;
限制¶
protected_databases是仅全局变量,不能在会话级别设置。不能通过设置为
''或','来清空列表;这些尝试将引发内部错误。要有效解除保护,可将 其设为一个不与任何现有数据库匹配的占位名称(例如'unused_value')。当
lower_case_table_names设为0时,列表中的数据库名称区分大小写。当lower_case_table_names为1时,所有名称以小写形式比较。受保护数据库会阻止非管理员用户执行 DDL(CREATE、ALTER、DROP、RENAME、CREATE INDEX、 DROP INDEX、CREATE VIEW、DROP VIEW、ALTER VIEW)、DML(INSERT、UPDATE、DELETE、REPLACE、 TRUNCATE)以及 clone/snapshot 操作。
accountadmin和sys角色对受保护数据库保留完全访问权限。