dje*_*lin 7 mysql security view
CREATE VIEW
语法是
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
Run Code Online (Sandbox Code Playgroud)
因为SECURITY
您可以设置DEFINER
或INVOKER
。什么时候选择“定义器”才有意义?据我了解,这意味着检查我的安全权限,即创建视图的人。如果我对我们的数据库拥有完全权限,那么我只是创建了一个视图,为任何调用者提供完全访问权限。这听起来不对。难道您不总是希望安全性是实际使用视图的人吗?
小智 8
引用自文档。
如果您拥有 SUPER 权限,则可以指定任何语法上合法的帐户名。如果该帐户实际上不存在,则会生成警告。
能够指定除视图创建者之外的安全帐户是使用 DEFINER 的一个关键部分,您似乎错过了这一点。
引用视图后,将根据视图 DEFINER 帐户拥有的权限检查视图访问的对象的权限...
这意味着您可以将 DEFINER 设置为使用有权访问底层对象的安全帐户,但拒绝广大用户访问这些对象,从而保持更严格的安全性。
例如,假设您有一些表 PrivateData,用户通常不能访问它,但您想创建一个内部报告来跟踪该表上的元数据。您拒绝用户对 PrivateData 的权限,但创建一个对表具有只读访问权限的帐户 PrivateDataReader。然后,您可以创建一个显示元数据信息的视图,将 PrivateDataReader 指定为 DEFINER。
如果您总是想使用访问视图的用户的安全性,那么您应该指定 INVOKER。
归档时间: |
|
查看次数: |
14102 次 |
最近记录: |