作者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/m.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