我目前正在使用最新版本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选项.有没有解决这个问题?
任何帮助都可以得到赞赏.
MySQL不支持WITH READ ONLY的CREATE VIEW.
可以间接方式创建只读视图:创建SELECT对所有表和CREATE VIEW特权具有特权的用户,然后使用此用户创建视图并SQL SECURITY DEFINER在CREATE 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特征是否为DEFINER或INVOKER.
这意味着视图的用户必须至少SELECT具有该视图的权限.然后,如果SQL SECURITY是,DEFINER那么DEFINER用户的权限将应用于视图定义中使用的表和视图.
| 归档时间: |
|
| 查看次数: |
3747 次 |
| 最近记录: |