提交 ea0ed2c0 编写于 作者: martianzhang's avatar martianzhang
上级 69e0a1f0
...@@ -881,7 +881,7 @@ func init() { ...@@ -881,7 +881,7 @@ func init() {
Item: "RES.005", Item: "RES.005",
Severity: "L4", Severity: "L4",
Summary: "UPDATE可能存在逻辑错误,导致数据损坏", Summary: "UPDATE可能存在逻辑错误,导致数据损坏",
Content: "", Content: "在一条UPDATE语句中,如果要更新多个字段,字段间不能使用 AND ,而应该用逗号分隔。",
Case: "update tbl set col = 1 and cl = 2 where col=3;", Case: "update tbl set col = 1 and cl = 2 where col=3;",
Func: (*Query4Audit).RuleUpdateSetAnd, Func: (*Query4Audit).RuleUpdateSetAnd,
}, },
......
...@@ -916,7 +916,7 @@ UPDATE film SET length = 120 WHERE title = 'abc' ORDER BY title ...@@ -916,7 +916,7 @@ UPDATE film SET length = 120 WHERE title = 'abc' ORDER BY title
* **Item**:RES.005 * **Item**:RES.005
* **Severity**:L4 * **Severity**:L4
* **Content**: * **Content**:在一条UPDATE语句中,如果要更新多个字段,字段间不能使用 AND ,而应该用逗号分隔。
* **Case**: * **Case**:
```sql ```sql
......
...@@ -86,7 +86,7 @@ advisor.Rule{Item:"RES.001", Severity:"L4", Summary:"非确定性的GROUP BY", C ...@@ -86,7 +86,7 @@ advisor.Rule{Item:"RES.001", Severity:"L4", Summary:"非确定性的GROUP BY", C
advisor.Rule{Item:"RES.002", Severity:"L4", Summary:"未使用ORDER BY的LIMIT查询", Content:"没有ORDER BY的LIMIT会导致非确定性的结果,这取决于查询执行计划。", Case:"select col1,col2 from tbl where name=xx limit 10", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"RES.002", Severity:"L4", Summary:"未使用ORDER BY的LIMIT查询", Content:"没有ORDER BY的LIMIT会导致非确定性的结果,这取决于查询执行计划。", Case:"select col1,col2 from tbl where name=xx limit 10", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"RES.003", Severity:"L4", Summary:"UPDATE/DELETE操作使用了LIMIT条件", Content:"UPDATE/DELETE操作使用LIMIT条件和不添加WHERE条件一样危险,它可将会导致主从数据不一致或从库同步中断。", Case:"UPDATE film SET length = 120 WHERE title = 'abc' LIMIT 1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"RES.003", Severity:"L4", Summary:"UPDATE/DELETE操作使用了LIMIT条件", Content:"UPDATE/DELETE操作使用LIMIT条件和不添加WHERE条件一样危险,它可将会导致主从数据不一致或从库同步中断。", Case:"UPDATE film SET length = 120 WHERE title = 'abc' LIMIT 1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"RES.004", Severity:"L4", Summary:"UPDATE/DELETE操作指定了ORDER BY条件", Content:"UPDATE/DELETE操作不要指定ORDER BY条件。", Case:"UPDATE film SET length = 120 WHERE title = 'abc' ORDER BY title", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"RES.004", Severity:"L4", Summary:"UPDATE/DELETE操作指定了ORDER BY条件", Content:"UPDATE/DELETE操作不要指定ORDER BY条件。", Case:"UPDATE film SET length = 120 WHERE title = 'abc' ORDER BY title", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"RES.005", Severity:"L4", Summary:"UPDATE可能存在逻辑错误,导致数据损坏", Content:"", Case:"update tbl set col = 1 and cl = 2 where col=3;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"RES.005", Severity:"L4", Summary:"UPDATE可能存在逻辑错误,导致数据损坏", Content:"在一条UPDATE语句中,如果要更新多个字段,字段间不能使用 AND ,而应该用逗号分隔。", Case:"update tbl set col = 1 and cl = 2 where col=3;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"RES.006", Severity:"L4", Summary:"永远不真的比较条件", Content:"查询条件永远非真,这将导致查询无匹配到的结果。", Case:"select * from tbl where 1 != 1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"RES.006", Severity:"L4", Summary:"永远不真的比较条件", Content:"查询条件永远非真,这将导致查询无匹配到的结果。", Case:"select * from tbl where 1 != 1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"RES.007", Severity:"L4", Summary:"永远为真的比较条件", Content:"查询条件永远为真,这将导致WHERE条件失效进行全表查询。", Case:"select * from tbl where 1 = 1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"RES.007", Severity:"L4", Summary:"永远为真的比较条件", Content:"查询条件永远为真,这将导致WHERE条件失效进行全表查询。", Case:"select * from tbl where 1 = 1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"RES.008", Severity:"L2", Summary:"不建议使用LOAD DATA/SELECT ... INTO OUTFILE", Content:"SELECT INTO OUTFILE需要授予FILE权限,这通过会引入安全问题。LOAD DATA虽然可以提高数据导入速度,但同时也可能导致从库同步延迟过大。", Case:"LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"RES.008", Severity:"L2", Summary:"不建议使用LOAD DATA/SELECT ... INTO OUTFILE", Content:"SELECT INTO OUTFILE需要授予FILE权限,这通过会引入安全问题。LOAD DATA虽然可以提高数据导入速度,但同时也可能导致从库同步延迟过大。", Case:"LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
......
...@@ -916,7 +916,7 @@ UPDATE film SET length = 120 WHERE title = 'abc' ORDER BY title ...@@ -916,7 +916,7 @@ UPDATE film SET length = 120 WHERE title = 'abc' ORDER BY title
* **Item**:RES.005 * **Item**:RES.005
* **Severity**:L4 * **Severity**:L4
* **Content**: * **Content**:在一条UPDATE语句中,如果要更新多个字段,字段间不能使用 AND ,而应该用逗号分隔。
* **Case**: * **Case**:
```sql ```sql
......
...@@ -1016,68 +1016,68 @@ ...@@ -1016,68 +1016,68 @@
{ {
"checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=", "checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=",
"path": "vitess.io/vitess", "path": "vitess.io/vitess",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=", "checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2", "path": "vitess.io/vitess/go/bytes2",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=", "checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=",
"path": "vitess.io/vitess/go/hack", "path": "vitess.io/vitess/go/hack",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=", "checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=",
"path": "vitess.io/vitess/go/sqltypes", "path": "vitess.io/vitess/go/sqltypes",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=", "checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=",
"path": "vitess.io/vitess/go/vt/log", "path": "vitess.io/vitess/go/vt/log",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=", "checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=",
"path": "vitess.io/vitess/go/vt/proto/query", "path": "vitess.io/vitess/go/vt/proto/query",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=", "checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=",
"path": "vitess.io/vitess/go/vt/proto/topodata", "path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=", "checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=",
"path": "vitess.io/vitess/go/vt/proto/vtgate", "path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=", "checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=",
"path": "vitess.io/vitess/go/vt/proto/vtrpc", "path": "vitess.io/vitess/go/vt/proto/vtrpc",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "3ggEFYVEhMPxyhkKhRGw3x1eZ9M=", "checksumSHA1": "3ggEFYVEhMPxyhkKhRGw3x1eZ9M=",
"path": "vitess.io/vitess/go/vt/sqlparser", "path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
}, },
{ {
"checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=", "checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=",
"path": "vitess.io/vitess/go/vt/vterrors", "path": "vitess.io/vitess/go/vt/vterrors",
"revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", "revision": "5b3aedd79bd1488060ae5c0551b31685892c6eed",
"revisionTime": "2018-11-14T14:39:22Z" "revisionTime": "2018-11-14T21:08:06Z"
} }
], ],
"rootPath": "github.com/XiaoMi/soar" "rootPath": "github.com/XiaoMi/soar"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册