使用 VB.NET 程序运行存储过程 [重复]

Posted

技术标签:

【中文标题】使用 VB.NET 程序运行存储过程 [重复]【英文标题】:Run Stored Procedure with a VB.NET program [duplicate] 【发布时间】:2014-01-08 10:13:42 【问题描述】:

我用 VB.NET 编写了一个程序,它连接到我们的一个 SQL Server。需要连接,因为数据库上有一些存储过程,必须执行。

但问题是,我无法运行任何存储过程。我认为问题的原因是,用户没有权限在数据库上运行任何存储过程。

我在 SQL Server 上创建了数据库,没有任何权限配置。

我程序上的连接字符串是这样的:

Data Source=SQL01;Initial Catalog=DB;Integrated Security=True

使用我的程序的客户是域用户。

现在我的问题是:我是否有可能定义一个这个 Active Directory 用户,该用户应该有权对数据库执行任何存储过程?

谢谢!

【问题讨论】:

如果这是一个编程问题,请发布相关代码和错误消息,如果是服务器管理问题,那么你就跑题了(serverfault.com) 所以问题真的是:如何模拟执行存储过程的用户?检查***.com/questions/8439517/… 顺便说一句,您为什么希望它以另一个用户身份运行?集成安全确保使用客户端凭据建立连接 @PanagiotisKanavos 好问题。是的,但是如果我想让 XYZ 客户端有权运行存储过程,我应该在数据库的哪里定义? 【参考方案1】:
USE myDB;
GO

CREATE ROLE newrole;
GO

GRANT EXECUTE ON dbo.myStoredProc TO newrole ;
GO

-- or if you want to grant execute to an entire schema.
GRANT EXEC ON SCHEMA::schema_name TO role_name

然后将 AD 组/用户添加到角色(您需要为 AD 用户/组创建登录名)

参考:GRANT

【讨论】:

对于那些了解 SQL Server 安全模型的人来说,这不是一个坏主意。对于那些不知道的人来说,这与原始问题有何关系 - 或者为什么它比模仿更可取 为了正确实现安全性,了解 SQL Server 的安全模型是一种先决条件。此外,它仍然适合/适用于模仿。 @MitchWheat 谢谢你的回答。我也应该运行最后一个命令吗? GRANT EXEC ON SCHEMA::schema_name TO role_name?这个命令有什么样的影响? 最后一条语句只是授予对整个架构执行的示例。 @MitchWheat Mhh 啊好的..现在我已经执行了所有命令,没有最后一个。现在,如果我运行我的程序,则会出现以下错误消息»'db' 中的 CREATE TABLE 权限被拒绝。你知道为什么吗?

以上是关于使用 VB.NET 程序运行存储过程 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET是如何使用ADO让存储过程返回数据表中的值呢?求解!

vb.net中直接查询和存储过程的区别

在 vb.net 应用程序中存储本地数据的不同方式

如何将 vb.net 中日期的空值传递给 sql 存储过程?

在 VB.NET 中从 SQL Server 执行存储过程?

VB.Net 没有捕获存储过程 raiserror