[討論] 把SQL寫在table裡的好處?

作者: littlethe (東周流浪漢)   2017-09-28 00:45:18
最近我看到一個狀況,
是公司有人開個table來放sql,
要用sql時,就從這個table裡把sql撈出來用,
我心想這樣用sql撈sql來執行不是多此一舉嗎?
我問對方為何不用sp,
對方說怕sp太多,
可能我孤陋寡聞以前還真沒看過這種做法,
所以我好奇來問問大家,
有遇到把sql放到table裡來用的狀況嗎?
這樣真的有好處嗎?
作者: drajan (EasoN)   2017-09-28 00:49:00
建view就可以了
作者: giacch   2017-09-28 00:53:00
新增SP要簽單子...
作者: vi000246 (Vi)   2017-09-28 00:57:00
有autoHokey...
作者: ripple0129 (perry tsai)   2017-09-28 01:09:00
多增加IO負擔,SQL更新麻煩,想不到任何好處。
作者: littlethe (東周流浪漢)   2017-09-28 01:09:00
我沒有規定新增SP要簽單子,所以他可以自己加SP
作者: ckvir (ckvir)   2017-09-28 01:21:00
沒好處
作者: alog (A肉哥)   2017-09-28 02:28:00
沒好處啊 SP太多真的影響到系統 排一個計畫升級規格就好了在TABLE塞SQL來取代這些作業的情況會兩種問題1. 安全性問題:權限劃分不容易控管、資料庫人員不會檢查每一次執行時到底執行了什麼 SQL 在裡面,若該系統被內部人員手賤或刻意都會引發災禍2. 缺乏標準化的概念、維護不容易、速度不見得比SP快我不太清楚到底這位工程師在擔心什麼..另外再補充 就是留意 command/sql injection 的問題沒意外的話 執行你那張table的client端帳號權限>= 那張table所有sql所需權限所以只要那張 table 內在某種狀況下 編寫好的sql 被竄改成非原先預期的結果很有可能資料庫人員連看都沒看就直接給他跑下去了或是裡面塞了一些可以直接寫入資料到系統上的語法埋後門這都是一個問題所以說 SP 怕太多 .. 我不認同 但也只能尊重你們公司的人員畢竟我真的不曉得他在擔心什麼問題
作者: CGS0 (Mike Chen)   2017-09-28 07:35:00
看越久會發現天才很多,或許他以後想改一個地方 ,就直接修正
作者: testPtt (測試)   2017-09-28 08:20:00
直接編到程式不好嗎?
作者: jj0321 (JJ與你倒數唷)   2017-09-28 08:40:00
還遇過JS放SQL呢
作者: nickerChen (黑鬼CHEN)   2017-09-28 09:03:00
光權限控管就很麻煩了;該不會他是想要程式版面比較乾淨吧
作者: mathrew (Joey)   2017-09-28 09:04:00
其實很多人是根本不知道有其他做法 就傻傻的一直用下去
作者: bobju (枯藤老樹昏鴉)   2017-09-28 09:15:00
就只是一種便宜行事的手法而已 找個地方塞sql
作者: allenxxx (fufuxxx)   2017-09-28 10:06:00
補設計文件的時候好整理而已
作者: stevekevin10 (hippo泡)   2017-09-28 10:14:00
SP是指什麼呀?
作者: iamshiao (CircleHsiao)   2017-09-28 10:19:00
sp = stored procedure
作者: chenxiaowoo (灶咪A嘎B)   2017-09-28 10:30:00
嗯~我是有把sql log放在cassandra裡過,撈出來執行..還真沒看過~至於優點...目前沒想到
作者: b92310051 (蛤利)   2017-09-28 11:14:00
優點就是...程式開發時間會比寫sp少...大概吧
作者: knives   2017-09-28 12:59:00
這以後坑一定很大,還不逃
作者: Adonisy (堂本瓜一)   2017-09-28 13:52:00
問他是不是沒修過資料庫...
作者: ChungLi5566 (中壢56哥)   2017-09-28 14:03:00
貴公司沒有原始碼掃描的工具嗎 這有injection耶我db讀的值拿去執行,還得經過白名單才能通過掃描
作者: dou0228 (7777)   2017-09-28 14:47:00
好處就是以後只有他改的動,別人不敢改
作者: jinmin88 (晝伏夜出)   2017-09-28 16:14:00
坑超大..趕快換工作吧
作者: testPtt (測試)   2017-09-28 16:30:00
有參數的SQL他要怎麼做
作者: knives   2017-09-28 16:36:00
可能是用print 方式把參數代入,不過還是爛
作者: a47135 (金屬史萊姆)   2017-09-28 17:15:00
可能更新資料庫比更新程式簡單XDDD
作者: pttuser (pttuser)   2017-09-28 19:12:00
我好像有見過,一種類似API概念,可能想把depend db的部份留在table,不過當初幫忙review沒多問就給他review+2了,哈哈
作者: atpx (秋雨的心情)   2017-09-28 19:22:00
有種狀況是系統本身就是要執行重複SQL的正常業務流程完畢的資料, user事後發現錯誤又不想重簽核IT就會提供簡易修改系統給user, 這系統只做執行sql改資料這個例子跟你的狀況不太相同. 僅說明現實上會有這種狀況
作者: accessdenied (存取違規)   2017-09-28 19:45:00
幹,就上有政策下有對策的垃圾工程師!
作者: ncwd1225 (粉絲應該放水煮)   2017-09-28 20:57:00
沒好處,後患無窮
作者: littlethe (東周流浪漢)   2017-09-28 22:13:00
感謝各位高手的見解,因為小弟知識有限,實在想不到這樣
作者: neo5277 (I am an agent of chaos)   2017-09-28 22:13:00
二樓整個突破盲點啊哈哈哈哈哈
作者: littlethe (東周流浪漢)   2017-09-28 22:14:00
做的好處是什麼,但又不希望我誤會對方,所以向你們請教我已經禁止該工程師這樣做了,我應該不用換工作啦,感謝版友們的好意提醒,我會多注意的to atpx,確實這狀況和你講的例子不同,你講的例子我可以接受,但我狀況是對方當常態在寫,所以我想還是要禁止
作者: kasume (kk)   2017-09-28 23:38:00
前端依條件動態執行不同command , table放的可以是sql,sp,等,前端系統會有一定的parsing 邏輯動態彈性夠的系統架構是會用這種方式的
作者: littlethe (東周流浪漢)   2017-09-29 00:07:00
樓上你講的是比較高階的應用了,我們系統很普通
作者: ChungLi5566 (中壢56哥)   2017-09-29 00:11:00
比較好奇貴公司的程式寫完不用源碼檢測跟黑箱嗎檢測報告就是很好的證據 可以駁回這種不安全的寫法
作者: littlethe (東周流浪漢)   2017-09-29 00:15:00
我才剛接手,而那工程師是前任主管,所以你可以想像囉
作者: asship (孤帆遠影)   2017-09-29 00:43:00
是不是用來存 REDO 跟 UNDO 的 log 呢?
作者: littlethe (東周流浪漢)   2017-09-29 01:11:00
真的不是log
作者: iFEELing (ing)   2017-09-29 01:47:00
我遇過的情況是程式上版有管控 所以AP把SQL藏在DB裡...
作者: vn509942 (如履薄冰)   2017-09-29 08:34:00
五六年前玩過後續交手麻煩
作者: seedli (帶骨的火腿)   2017-09-29 09:55:00
是DB版控用的嗎... 明明就很多版控的軟體啊 像liquibase
作者: littlethe (東周流浪漢)   2017-09-29 22:39:00
不是版控用的,如果是用在特殊目的,我可以接受的

Links booklink

Contact Us: admin [ a t ] ucptt.com