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