作者littlethe (东周流浪汉)
看板Soft_Job
标题[讨论] 把SQL写在table里的好处?
时间Thu Sep 28 00:45:18 2017
最近我看到一个状况,
是公司有人开个table来放sql,
要用sql时,就从这个table里把sql捞出来用,
我心想这样用sql捞sql来执行不是多此一举吗?
我问对方为何不用sp,
对方说怕sp太多,
可能我孤陋寡闻以前还真没看过这种做法,
所以我好奇来问问大家,
有遇到把sql放到table里来用的状况吗?
这样真的有好处吗?
--
十年前,当我知道前女友结婚时,我哭得稀哩哗啦,
十年後,当我知道另一位前女友结婚时,我一滴泪也没流,
只是一个人坐在窗前,听着风铃的声音,静静的沉思着
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 89.47.15.155
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1506530741.A.A14.html
1F:推 drajan: 建view就可以了 09/28 00:49
2F:推 giacch: 新增SP要签单子... 09/28 00:53
3F:→ vi000246: 有autoHokey... 09/28 00:57
4F:推 ripple0129: 多增加IO负担,SQL更新麻烦,想不到任何好处。 09/28 01:09
5F:→ littlethe: 我没有规定新增SP要签单子,所以他可以自己加SP 09/28 01:09
6F:→ ckvir: 没好处 09/28 01:21
7F:→ alog: 没好处啊 SP太多真的影响到系统 排一个计画升级规格就好了 09/28 02:28
8F:→ alog: 在TABLE塞SQL来取代这些作业的情况会两种问题 09/28 02:28
9F:→ alog: 1. 安全性问题:权限划分不容易控管、资料库人员不会检查每 09/28 02:30
10F:→ alog: 一次执行时到底执行了什麽 SQL 在里面,若该系统被内部人员 09/28 02:30
11F:→ alog: 手贱或刻意都会引发灾祸 09/28 02:30
12F:推 alog: 2. 缺乏标准化的概念、维护不容易、速度不见得比SP快 09/28 02:32
13F:→ alog: 我不太清楚到底这位工程师在担心什麽.. 09/28 02:35
14F:→ alog: 另外再补充 就是留意 command/sql injection 的问题 09/28 02:42
15F:→ alog: 没意外的话 执行你那张table的client端帐号权限>= 那张tabl 09/28 02:44
16F:→ alog: e所有sql所需权限 09/28 02:44
17F:→ alog: 所以只要那张 table 内在某种状况下 编写好的sql 被窜改成非 09/28 02:44
18F:→ alog: 原先预期的结果 09/28 02:44
19F:→ alog: 很有可能资料库人员连看都没看就直接给他跑下去了 09/28 02:45
20F:→ alog: 或是里面塞了一些可以直接写入资料到系统上的语法埋後门 09/28 02:45
21F:→ alog: 这都是一个问题 09/28 02:46
22F:推 alog: 所以说 SP 怕太多 .. 我不认同 但也只能尊重你们公司的人员 09/28 02:49
23F:→ alog: 毕竟我真的不晓得他在担心什麽问题 09/28 02:49
24F:推 CGS0: 看越久会发现天才很多,或许他以後想改一个地方 ,就直接修 09/28 07:35
25F:→ CGS0: 正 09/28 07:35
26F:→ testPtt: 直接编到程式不好吗? 09/28 08:20
27F:推 jj0321: 还遇过JS放SQL呢 09/28 08:40
28F:→ nickerChen: 光权限控管就很麻烦了;该不会他是想要程式版面比较 09/28 09:03
29F:→ nickerChen: 乾净吧 09/28 09:03
30F:推 mathrew: 其实很多人是根本不知道有其他做法 就傻傻的一直用下去 09/28 09:04
31F:→ bobju: 就只是一种便宜行事的手法而已 找个地方塞sql 09/28 09:15
32F:→ allenxxx: 补设计文件的时候好整理而已 09/28 10:06
33F:→ stevekevin10: SP是指什麽呀? 09/28 10:14
34F:→ iamshiao: sp = stored procedure 09/28 10:19
35F:→ chenxiaowoo: 嗯~我是有把sql log放在cassandra里过,捞出来执行.. 09/28 10:30
36F:→ chenxiaowoo: 还真没看过~至於优点...目前没想到 09/28 10:30
37F:推 b92310051: 优点就是...程式开发时间会比写sp少...大概吧 09/28 11:14
38F:推 knives: 这以後坑一定很大,还不逃 09/28 12:59
39F:推 Adonisy: 问他是不是没修过资料库... 09/28 13:52
40F:推 ChungLi5566: 贵公司没有原始码扫描的工具吗 这有injection耶 09/28 14:03
41F:→ ChungLi5566: 我db读的值拿去执行,还得经过白名单才能通过扫描 09/28 14:06
42F:推 dou0228: 好处就是以後只有他改的动,别人不敢改 09/28 14:47
43F:推 jinmin88: 坑超大..赶快换工作吧 09/28 16:14
44F:→ testPtt: 有参数的SQL他要怎麽做 09/28 16:30
45F:推 knives: 可能是用print 方式把参数代入,不过还是烂 09/28 16:36
46F:推 a47135: 可能更新资料库比更新程式简单XDDD 09/28 17:15
47F:推 pttuser: 我好像有见过,一种类似API概念,可能想把depend db的部 09/28 19:12
48F:→ pttuser: 份留在table,不过当初帮忙review没多问就给他review+2了 09/28 19:12
49F:→ pttuser: ,哈哈 09/28 19:12
50F:推 atpx: 有种状况是系统本身就是要执行重复SQL的 09/28 19:22
51F:→ atpx: 正常业务流程完毕的资料, user事後发现错误又不想重签核 09/28 19:23
52F:→ atpx: IT就会提供简易修改系统给user, 这系统只做执行sql改资料 09/28 19:24
53F:→ atpx: 这个例子跟你的状况不太相同. 仅说明现实上会有这种状况 09/28 19:24
54F:嘘 accessdenied: 干,就上有政策下有对策的垃圾工程师! 09/28 19:45
55F:推 ncwd1225: 没好处,後患无穷 09/28 20:57
56F:→ littlethe: 感谢各位高手的见解,因为小弟知识有限,实在想不到这样 09/28 22:13
57F:推 neo5277: 二楼整个突破盲点啊哈哈哈哈哈 09/28 22:13
58F:→ littlethe: 做的好处是什麽,但又不希望我误会对方,所以向你们请教 09/28 22:14
59F:→ littlethe: 我已经禁止该工程师这样做了,我应该不用换工作啦,感谢 09/28 22:16
60F:→ littlethe: 版友们的好意提醒,我会多注意的 09/28 22:17
61F:→ littlethe: to atpx,确实这状况和你讲的例子不同,你讲的例子我可以 09/28 22:34
62F:→ littlethe: 接受,但我状况是对方当常态在写,所以我想还是要禁止 09/28 22:36
63F:推 kasume: 前端依条件动态执行不同command , table放的可以是sql,sp, 09/28 23:38
64F:→ kasume: 等,前端系统会有一定的parsing 逻辑 09/28 23:38
65F:推 kasume: 动态弹性够的系统架构是会用这种方式的 09/28 23:41
66F:→ littlethe: 楼上你讲的是比较高阶的应用了,我们系统很普通 09/29 00:07
67F:→ ChungLi5566: 比较好奇贵公司的程式写完不用源码检测跟黑箱吗 09/29 00:11
68F:→ ChungLi5566: 检测报告就是很好的证据 可以驳回这种不安全的写法 09/29 00:12
69F:→ littlethe: 我才刚接手,而那工程师是前任主管,所以你可以想像罗 09/29 00:15
70F:推 asship: 是不是用来存 REDO 跟 UNDO 的 log 呢? 09/29 00:43
71F:→ littlethe: 真的不是log 09/29 01:11
72F:→ iFEELing: 我遇过的情况是程式上版有管控 所以AP把SQL藏在DB里... 09/29 01:47
73F:推 vn509942: 五六年前玩过 09/29 08:34
74F:→ vn509942: 後续交手麻烦 09/29 08:35
75F:推 seedli: 是DB版控用的吗... 明明就很多版控的软体啊 像liquibase 09/29 09:55
76F:→ littlethe: 不是版控用的,如果是用在特殊目的,我可以接受的 09/29 22:39