【问题标题】:What permission do I need to use SqlBulkCopy in SQL Server 2008?在 SQL Server 2008 中使用 SqlBulkCopy 需要什么权限?
【发布时间】:2009-03-17 17:38:44
【问题描述】:

使用 .NET 的 SqlBulkCopy,我需要在 SQL Server 2008 中授予用户什么权限?

【问题讨论】:

    标签: .net sql-server ado.net


    【解决方案1】:

    http://msdn.microsoft.com/en-us/library/ms162802.aspx

    bcp out 操作需要源表的 SELECT 权限。

    bcp in 操作至少需要目标表的 SELECT/INSERT 权限。此外,如果满足以下任一条件,则需要 ALTER TABLE 权限:

    • 存在约束且未指定 CHECK_CONSTRAINTS 提示。 ms162802.note(zh-cn,SQL.100).gif注意: 禁用约束是默认行为。要显式启用约束,请使用带有 CHECK_CONSTRAINTS 提示的 -h 选项。

    • 存在触发器,但未指定 FIRE_TRIGGER 提示。 ms162802.note(zh-cn,SQL.100).gif注意: 默认情况下,不会触发触发器。要显式触发触发器,请使用带有 FIRE_TRIGGERS 提示的 -h 选项。

    • 您使用 -E 选项从数据文件中导入标识值。

    注意: 要求目标表的 ALTER TABLE 权限是 SQL Server 2005 中的新要求。如果用户帐户缺少目标表的 ALTER 表权限,这一新要求可能会导致不强制执行触发器和约束检查的 bcp 脚本失败。

    【讨论】:

    • 在 .Net 中使用:var bulkCopy = new SqlBulkCopy(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"], SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints);
    【解决方案2】:

    从 .net 中指定这些提示:

    var bulkCopy = new SqlBulkCopy(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
            SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints);
    

    【讨论】:

      【解决方案3】:

      成功执行 SqlBulkCopy 类只需要 SELECT/INSERT 权限。该类针对目标 SQL Server 表发出 INSERT BULK 语句。今天在我们的一台开发服务器上验证了这一点。

      【讨论】:

      【解决方案4】:

      有一个 bulkadmin 角色允许 BULK INSERT 命令。 http://msdn.microsoft.com/en-us/library/ms189934(SQL.90).aspx

      【讨论】:

      • 太多了,真想把这个用户限制在一个表中。
      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      相关资源
      最近更新 更多