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

看板Soft_Job (軟體人)作者 (東周流浪漢)時間8年前 (2017/09/28 00:45), 編輯推噓24(25150)
留言76則, 34人參與, 8年前最新討論串1/1
最近我看到一個狀況, 是公司有人開個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

09/28 00:49, 8年前 , 1F
建view就可以了
09/28 00:49, 1F

09/28 00:53, 8年前 , 2F
新增SP要簽單子...
09/28 00:53, 2F

09/28 00:57, 8年前 , 3F
有autoHokey...
09/28 00:57, 3F

09/28 01:09, 8年前 , 4F
多增加IO負擔,SQL更新麻煩,想不到任何好處。
09/28 01:09, 4F

09/28 01:09, 8年前 , 5F
我沒有規定新增SP要簽單子,所以他可以自己加SP
09/28 01:09, 5F

09/28 01:21, 8年前 , 6F
沒好處
09/28 01:21, 6F

09/28 02:28, 8年前 , 7F
沒好處啊 SP太多真的影響到系統 排一個計畫升級規格就好了
09/28 02:28, 7F

09/28 02:28, 8年前 , 8F
在TABLE塞SQL來取代這些作業的情況會兩種問題
09/28 02:28, 8F

09/28 02:30, 8年前 , 9F
1. 安全性問題:權限劃分不容易控管、資料庫人員不會檢查每
09/28 02:30, 9F

09/28 02:30, 8年前 , 10F
一次執行時到底執行了什麼 SQL 在裡面,若該系統被內部人員
09/28 02:30, 10F

09/28 02:30, 8年前 , 11F
手賤或刻意都會引發災禍
09/28 02:30, 11F

09/28 02:32, 8年前 , 12F
2. 缺乏標準化的概念、維護不容易、速度不見得比SP快
09/28 02:32, 12F

09/28 02:35, 8年前 , 13F
我不太清楚到底這位工程師在擔心什麼..
09/28 02:35, 13F

09/28 02:42, 8年前 , 14F
另外再補充 就是留意 command/sql injection 的問題
09/28 02:42, 14F

09/28 02:44, 8年前 , 15F
沒意外的話 執行你那張table的client端帳號權限>= 那張tabl
09/28 02:44, 15F

09/28 02:44, 8年前 , 16F
e所有sql所需權限
09/28 02:44, 16F

09/28 02:44, 8年前 , 17F
所以只要那張 table 內在某種狀況下 編寫好的sql 被竄改成非
09/28 02:44, 17F

09/28 02:44, 8年前 , 18F
原先預期的結果
09/28 02:44, 18F

09/28 02:45, 8年前 , 19F
很有可能資料庫人員連看都沒看就直接給他跑下去了
09/28 02:45, 19F

09/28 02:45, 8年前 , 20F
或是裡面塞了一些可以直接寫入資料到系統上的語法埋後門
09/28 02:45, 20F

09/28 02:46, 8年前 , 21F
這都是一個問題
09/28 02:46, 21F

09/28 02:49, 8年前 , 22F
所以說 SP 怕太多 .. 我不認同 但也只能尊重你們公司的人員
09/28 02:49, 22F

09/28 02:49, 8年前 , 23F
畢竟我真的不曉得他在擔心什麼問題
09/28 02:49, 23F

09/28 07:35, 8年前 , 24F
看越久會發現天才很多,或許他以後想改一個地方 ,就直接修
09/28 07:35, 24F

09/28 07:35, 8年前 , 25F
09/28 07:35, 25F

09/28 08:20, 8年前 , 26F
直接編到程式不好嗎?
09/28 08:20, 26F

09/28 08:40, 8年前 , 27F
還遇過JS放SQL呢
09/28 08:40, 27F

09/28 09:03, 8年前 , 28F
光權限控管就很麻煩了;該不會他是想要程式版面比較
09/28 09:03, 28F

09/28 09:03, 8年前 , 29F
乾淨吧
09/28 09:03, 29F

09/28 09:04, 8年前 , 30F
其實很多人是根本不知道有其他做法 就傻傻的一直用下去
09/28 09:04, 30F

09/28 09:15, 8年前 , 31F
就只是一種便宜行事的手法而已 找個地方塞sql
09/28 09:15, 31F

09/28 10:06, 8年前 , 32F
補設計文件的時候好整理而已
09/28 10:06, 32F

09/28 10:14, 8年前 , 33F
SP是指什麼呀?
09/28 10:14, 33F

09/28 10:19, 8年前 , 34F
sp = stored procedure
09/28 10:19, 34F

09/28 10:30, 8年前 , 35F
嗯~我是有把sql log放在cassandra裡過,撈出來執行..
09/28 10:30, 35F

09/28 10:30, 8年前 , 36F
還真沒看過~至於優點...目前沒想到
09/28 10:30, 36F

09/28 11:14, 8年前 , 37F
優點就是...程式開發時間會比寫sp少...大概吧
09/28 11:14, 37F

09/28 12:59, 8年前 , 38F
這以後坑一定很大,還不逃
09/28 12:59, 38F

09/28 13:52, 8年前 , 39F
問他是不是沒修過資料庫...
09/28 13:52, 39F

09/28 14:03, 8年前 , 40F
貴公司沒有原始碼掃描的工具嗎 這有injection耶
09/28 14:03, 40F

09/28 14:06, 8年前 , 41F
我db讀的值拿去執行,還得經過白名單才能通過掃描
09/28 14:06, 41F

09/28 14:47, 8年前 , 42F
好處就是以後只有他改的動,別人不敢改
09/28 14:47, 42F

09/28 16:14, 8年前 , 43F
坑超大..趕快換工作吧
09/28 16:14, 43F

09/28 16:30, 8年前 , 44F
有參數的SQL他要怎麼做
09/28 16:30, 44F

09/28 16:36, 8年前 , 45F
可能是用print 方式把參數代入,不過還是爛
09/28 16:36, 45F

09/28 17:15, 8年前 , 46F
可能更新資料庫比更新程式簡單XDDD
09/28 17:15, 46F

09/28 19:12, 8年前 , 47F
我好像有見過,一種類似API概念,可能想把depend db的部
09/28 19:12, 47F

09/28 19:12, 8年前 , 48F
份留在table,不過當初幫忙review沒多問就給他review+2了
09/28 19:12, 48F

09/28 19:12, 8年前 , 49F
,哈哈
09/28 19:12, 49F

09/28 19:22, 8年前 , 50F
有種狀況是系統本身就是要執行重複SQL的
09/28 19:22, 50F

09/28 19:23, 8年前 , 51F
正常業務流程完畢的資料, user事後發現錯誤又不想重簽核
09/28 19:23, 51F

09/28 19:24, 8年前 , 52F
IT就會提供簡易修改系統給user, 這系統只做執行sql改資料
09/28 19:24, 52F

09/28 19:24, 8年前 , 53F
這個例子跟你的狀況不太相同. 僅說明現實上會有這種狀況
09/28 19:24, 53F

09/28 19:45, 8年前 , 54F
幹,就上有政策下有對策的垃圾工程師!
09/28 19:45, 54F

09/28 20:57, 8年前 , 55F
沒好處,後患無窮
09/28 20:57, 55F

09/28 22:13, 8年前 , 56F
感謝各位高手的見解,因為小弟知識有限,實在想不到這樣
09/28 22:13, 56F

09/28 22:13, 8年前 , 57F
二樓整個突破盲點啊哈哈哈哈哈
09/28 22:13, 57F

09/28 22:14, 8年前 , 58F
做的好處是什麼,但又不希望我誤會對方,所以向你們請教
09/28 22:14, 58F

09/28 22:16, 8年前 , 59F
我已經禁止該工程師這樣做了,我應該不用換工作啦,感謝
09/28 22:16, 59F

09/28 22:17, 8年前 , 60F
版友們的好意提醒,我會多注意的
09/28 22:17, 60F

09/28 22:34, 8年前 , 61F
to atpx,確實這狀況和你講的例子不同,你講的例子我可以
09/28 22:34, 61F

09/28 22:36, 8年前 , 62F
接受,但我狀況是對方當常態在寫,所以我想還是要禁止
09/28 22:36, 62F

09/28 23:38, 8年前 , 63F
前端依條件動態執行不同command , table放的可以是sql,sp,
09/28 23:38, 63F

09/28 23:38, 8年前 , 64F
等,前端系統會有一定的parsing 邏輯
09/28 23:38, 64F

09/28 23:41, 8年前 , 65F
動態彈性夠的系統架構是會用這種方式的
09/28 23:41, 65F

09/29 00:07, 8年前 , 66F
樓上你講的是比較高階的應用了,我們系統很普通
09/29 00:07, 66F

09/29 00:11, 8年前 , 67F
比較好奇貴公司的程式寫完不用源碼檢測跟黑箱嗎
09/29 00:11, 67F

09/29 00:12, 8年前 , 68F
檢測報告就是很好的證據 可以駁回這種不安全的寫法
09/29 00:12, 68F

09/29 00:15, 8年前 , 69F
我才剛接手,而那工程師是前任主管,所以你可以想像囉
09/29 00:15, 69F

09/29 00:43, 8年前 , 70F
是不是用來存 REDO 跟 UNDO 的 log 呢?
09/29 00:43, 70F

09/29 01:11, 8年前 , 71F
真的不是log
09/29 01:11, 71F

09/29 01:47, 8年前 , 72F
我遇過的情況是程式上版有管控 所以AP把SQL藏在DB裡...
09/29 01:47, 72F

09/29 08:34, 8年前 , 73F
五六年前玩過
09/29 08:34, 73F

09/29 08:35, 8年前 , 74F
後續交手麻煩
09/29 08:35, 74F

09/29 09:55, 8年前 , 75F
是DB版控用的嗎... 明明就很多版控的軟體啊 像liquibase
09/29 09:55, 75F

09/29 22:39, 8年前 , 76F
不是版控用的,如果是用在特殊目的,我可以接受的
09/29 22:39, 76F
文章代碼(AID): #1PozMreK (Soft_Job)
文章代碼(AID): #1PozMreK (Soft_Job)