none
請問 bcp utility與 bulk insert 的使用時機 RRS feed

  • 問題

  • 請問bcp utility 與 bulk insert 的使用時機 ?

    如果是要將 text file import 到 table , 且使用 stored procedure , 兩者何者較佳 ? 為什麼 ?

    謝謝

    2012年11月6日 上午 03:28

解答

  • 感謝各位的回覆.

    謝謝 Terry 提供的多個連結,只是我悟性有點差,實在從連結中看不大出差異在那.

    除了 bulk insert 不能匯出檔案外 , 但我若是要匯入是否就沒差了 ?

    如果如Terry 告知, stored produre 中也可用 xp_cmdshell 執行 bcp ,

    那除了安全性好像沒差別.

    桦仔所提bcp為 exe , 需要比较高的权限(比较危险),也是安全性的差別

    但 rmiao又說 don't need more OS nor sql permission to run bcp , 這樣我就有點搞混了

    是說 bulk insert 還需要額外的權限嗎 ?

    難道除了安全性都沒有差別嗎 ?

    請問還有其他差別非用其中一種不可的狀況嗎 ? 謝謝

    以下節錄自MSDN,請參考:

    bcp out 作業需要來源資料表的 SELECT 權限。

    bcp in 作業至少需要目標資料表的 SELECT/INSERT 權限。

    bulk insert 需要 INSERT 和 ADMINISTER BULK OPERATIONS 權限。


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔


    2012年11月7日 上午 04:05
    版主
    • 已標示為解答 MIS110 2012年11月8日 上午 07:29
    2012年11月8日 上午 01:30
    版主

所有回覆

  • 首先你可以參考下列的文件。

    http://msdn.microsoft.com/zh-tw/library/ms188609.aspx

    http://msdn.microsoft.com/zh-tw/library/ms162802.aspx

    http://msdn.microsoft.com/zh-tw/library/ms188365.aspx

    http://technet.microsoft.com/zh-tw/library/ms175046.aspx

    有關你的問題,就我所知BCP是公用程式必須在命令列模式下執行,在Stored Procedure中如果要執行命令列公用程式,必須使用xp_cmdshell,但基於安全性您可以建議使用完之後立刻關閉xp_cmdshell。依照你的描述,比較建議使用bulk insert,可以在stored procedure中利用bulk insert來匯入資料。


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔

    2012年11月6日 上午 05:14
    版主
  • 个人感觉bcp跟bulk insert没有什么区别

    就是安全性方面,bcp需要比较高的权限(比较危险),因为需要执行exe

    在这个路径下:你的SQLSERVER安装路径\Microsoft SQL Server\90\Tools\Binn 下就有bcp.exe
    你在cmd下打开bcp工具
    例如:
    C:\Users\Administrator>"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\bcp.exe"


    给我写信: QQ我:点击这里给我发消息

    2012年11月6日 下午 01:41
  • You don't need more OS nor sql permission to run bcp.
    2012年11月6日 下午 02:03
  • 感謝各位的回覆.

    謝謝 Terry 提供的多個連結,只是我悟性有點差,實在從連結中看不大出差異在那.

    除了 bulk insert 不能匯出檔案外 , 但我若是要匯入是否就沒差了 ?

    如果如Terry 告知, stored produre 中也可用 xp_cmdshell 執行 bcp ,

    那除了安全性好像沒差別.

    桦仔所提bcp為 exe , 需要比较高的权限(比较危险),也是安全性的差別

    但 rmiao又說 don't need more OS nor sql permission to run bcp , 這樣我就有點搞混了

    是說 bulk insert 還需要額外的權限嗎 ?

    難道除了安全性都沒有差別嗎 ?

    請問還有其他差別非用其中一種不可的狀況嗎 ? 謝謝

    2012年11月7日 上午 02:05
  • For data loading, they are similar but easiier to use bulk insert inside sp. Security is not the issue because both need bulk load rights. The difference is that bulk insert runs inside sql while bcp runs outside of sql.
    2012年11月7日 上午 03:17
  • 感謝各位的回覆.

    謝謝 Terry 提供的多個連結,只是我悟性有點差,實在從連結中看不大出差異在那.

    除了 bulk insert 不能匯出檔案外 , 但我若是要匯入是否就沒差了 ?

    如果如Terry 告知, stored produre 中也可用 xp_cmdshell 執行 bcp ,

    那除了安全性好像沒差別.

    桦仔所提bcp為 exe , 需要比较高的权限(比较危险),也是安全性的差別

    但 rmiao又說 don't need more OS nor sql permission to run bcp , 這樣我就有點搞混了

    是說 bulk insert 還需要額外的權限嗎 ?

    難道除了安全性都沒有差別嗎 ?

    請問還有其他差別非用其中一種不可的狀況嗎 ? 謝謝

    以下節錄自MSDN,請參考:

    bcp out 作業需要來源資料表的 SELECT 權限。

    bcp in 作業至少需要目標資料表的 SELECT/INSERT 權限。

    bulk insert 需要 INSERT 和 ADMINISTER BULK OPERATIONS 權限。


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔


    2012年11月7日 上午 04:05
    版主
    • 已標示為解答 MIS110 2012年11月8日 上午 07:29
    2012年11月8日 上午 01:30
    版主
  • 感謝兩位再次的回覆

    也感謝提供資訊豐富的 blog

    2012年11月8日 上午 07:28
  • 今天在一篇文章《sqlserver注入方式与安全防护的学习 》里看到 一些存储过程的威胁,其中就包括xp_cmdshell 

    移除其他你认为会造成威胁的系统储存过程。 这种存储过程是相当多的,而且他们也会浪费一些cpu时间。
    小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试,确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表:
    sp_sdidebug
    xp_availablemedia
    xp_cmdshell
    xp_deletemail
    xp_dirtree
    xp_dropwebtask
    xp_dsninfo
    xp_enumdsn  

    文章地址:http://www.cnblogs.com/chillsrc/archive/2008/12/10/1346054.html


    给我写信: QQ我:点击这里给我发消息

    2012年11月11日 上午 08:44
  • 初级黑客攻击SQL Server时,首先采用的方法是执行master数据库中的扩展存储过程xp_cmdshell命令来执行一些指令,添加用户,添加文件,添加木马病毒等.

    Exec master..xp_cmdshell 'dir'

    Exec master..xp_cmdshell 'net user'


    给我写信: QQ我:点击这里给我发消息

    2012年11月11日 上午 11:40
  • 感謝 桦仔 提供有關安全性的資訊.

    尤其 执行一些指令,添加用户,添加文件,添加木马病毒 的訊息,

    公司正好遇到一些攻擊,很有幫助

    2012年11月12日 上午 06:37
  • 我也是看了那篇文章才知道的,能帮助到LZ就好


    给我写信: QQ我:点击这里给我发消息

    2012年11月12日 上午 07:04
  • First of all, not everyone can run xp_cmdshell. Second, not everyone can run OS admin tasks via xp_cmdshell.
    2012年11月12日 下午 02:02