Mic*_*eco 3 postgresql sql-injection psql
psql\i命令能够执行给定的 SQL 脚本,但我需要一种将参数传递给脚本的方法。
示例:假设您有这个简单的脚本
select * from :table LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
我试过了
my_db=> \i my-script.sql -v table="core.product"
Run Code Online (Sandbox Code Playgroud)
但出现这个错误
psql:my-script.sql:1: ERROR: syntax error at or near ":"
LINE 1: select * from :table LIMIT 1;
^
\i: extra argument "-v" ignored
\i: extra argument "table="core.product"" ignored
Run Code Online (Sandbox Code Playgroud)
我知道在终端上运行它会起作用,但我已经在 psql 中了。
psql -v table="core.product" -f my-script.sql
Run Code Online (Sandbox Code Playgroud)
用于\set在 psql 中设置变量。
在此处阅读手册中有关 SQL 插值的内容:
理想情况下,您的脚本应为:
SELECT * FROM :"my_schema".:"my_table" LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
模式和表分别用双引号引起来,用于标识符插值。然后在 psql 中设置模式和表,不带引号,例如:
my_db=>\set my_schema core
my_db=>\set my_table product
Run Code Online (Sandbox Code Playgroud)
只是简单的、区分大小写的名称。最后执行:
my_db=>\i my-script.sql
Run Code Online (Sandbox Code Playgroud)
这样,脚本就可以安全地防止 SQL 注入。
| 归档时间: |
|
| 查看次数: |
10291 次 |
| 最近记录: |