是否可以在MySQL中创建具有只读选项的视图?

Kul*_*gar 3 mysql

我目前正在使用最新版本MySQL(版本8.0.2),我正在尝试创建一个read-only View.

这是我的查询的样子:

CREATE VIEW Emp_Salary3 AS
SELECT Empid, Ename, Date_Joined, Salary, Dcode 
FROM Employees
WHERE Salary < 35000
WITH READ ONLY;
Run Code Online (Sandbox Code Playgroud)

但后来我得到的回应是:

错误代码:1064.您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第5行的"READ ONLY"附近使用正确的语法

因此我也检查了手册,它没有任何READ-ONLY选项.有没有解决这个问题?

任何帮助都可以得到赞赏.

axi*_*iac 5

MySQL不支持WITH READ ONLYCREATE VIEW.

可以间接方式创建只读视图:创建SELECT对所有表和CREATE VIEW特权具有特权的用户,然后使用此用户创建视图并SQL SECURITY DEFINERCREATE VIEW语句中指定:

CREATE 
    DEFINER = CURRENT_USER
    SQL SECURITY DEFINER
VIEW Emp_Salary3 AS
SELECT Empid, Ename, Date_Joined, Salary, Dcode 
FROM Employees
WHERE Salary < 35000
Run Code Online (Sandbox Code Playgroud)

DEFINER = CURRENT_USER如果使用受限用户创建视图,则不需要该行.

或者您可以使用管理员用户创建视图,在这种情况下,该行DEFINER =必须包含将拥有该视图的用户的名称.

文档说明:

MySQL检查查看权限,如下所示:

在视图定义时,视图创建者必须具有使用视图访问的顶级对象所需的权限.例如,如果视图定义引用表列,则创建者必须对定义的选择列表中的每个列具有一些特权,并且SELECT对定义中其他位置使用的每个列具有特权.如果定义引用存储的函数,则只能检查调用该函数所需的权限.函数调用时所需的权限只能在执行时检查:对于不同的调用,可能会采用函数内的不同执行路径.

引用视图的用户必须具有访问它的适当权限(SELECT从中进行选择,INSERT插入视图等).

引用视图时DEFINER,将根据视图帐户或调用者所拥有的权限检查视图访问的对象的权限,具体取决于SQL SECURITY特征是否为DEFINERINVOKER.

这意味着视图的用户必须至少SELECT具有该视图的权限.然后,如果SQL SECURITY是,DEFINER那么DEFINER用户的权限将应用于视图定义中使用的表和视图.