【发布时间】:2009-03-17 17:38:44
【问题描述】:
使用 .NET 的 SqlBulkCopy,我需要在 SQL Server 2008 中授予用户什么权限?
【问题讨论】:
标签: .net sql-server ado.net
使用 .NET 的 SqlBulkCopy,我需要在 SQL Server 2008 中授予用户什么权限?
【问题讨论】:
标签: .net sql-server ado.net
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);
【讨论】:
成功执行 SqlBulkCopy 类只需要 SELECT/INSERT 权限。该类针对目标 SQL Server 表发出 INSERT BULK 语句。今天在我们的一台开发服务器上验证了这一点。
【讨论】:
BULK INSERT的文档:docs.microsoft.com/en-us/sql/t-sql/statements/…
有一个 bulkadmin 角色允许 BULK INSERT 命令。 http://msdn.microsoft.com/en-us/library/ms189934(SQL.90).aspx
【讨论】: