【问题标题】:Write to database with Read only access [TSQL Stored Procedure] [duplicate]以只读访问权限写入数据库 [SQL 存储过程] [重复]
【发布时间】:2019-07-20 19:48:02
【问题描述】:

情况:
我有各种用户被允许对数据库进行只读访问。 是否可以使用 Excel 中的范围通过存储过程向数据库插入行?

如果是,谁能帮我提供一个示例 VBA 或 SQL 脚本?

【问题讨论】:

  • 是的,您可以创建一个将行插入到表中的存储过程,并且只授予用户从表中读取和执行该过程的权限。要求是过程的所有者也是相关表的所有者,在这种情况下不检查权限。
  • @GSerg 我有点困惑,也许我只是需要一杯咖啡,但如果你是一张桌子的主人,那么你就不能完全访问那张桌子吗?我觉得成为一张桌子的主人却无法访问我自己的桌子很奇怪。
  • @Pᴇʜ 如果作为表的所有者,您还创建了一个插入该表的存储过程,并将其上的execute 授予其他人,他们将能够调用它并让它插入,即使他们没有直接插入的权限。该过程在 他们的 安全上下文中执行,并且插入成功是因为未执行权限检查(这是因为您拥有该过程和表),而不是因为他们“以您的身份”执行它。
  • @GSerg 啊,现在很清楚了。谢谢你的解释。

标签: excel vba tsql


【解决方案1】:

很抱歉带来坏消息,但是您想要的解决方法无法在 T-SQL 上完成。来自官方Microsoft documentation

" 运行 EXECUTE 语句不需要权限。但是,EXECUTE 字符串中引用的安全对象需要权限。例如,如果字符串包含 INSERT 语句,则 EXECUTE 语句的调用者必须具有 INSERT目标表的权限..."

【讨论】:

  • 您应该进一步阅读。 “但是,如果同一用户拥有调用模块和被调用模块,则不会对第二个模块执行EXECUTE权限检查。” 也就是说,如果同一用户拥有存储过程和表, 权限检查被跳过。
  • @GSerg 从第二段我理解,简单来说就是:如果我写了这个过程,我调用它来执行它,那么EXECUTE权限检查就不会被执行。我说的对吗?
  • 没有。如果您编写了该过程并且您拥有该表,那么如果其他人执行您的过程,则不会检查 insert 权限。
  • @peh 您如何建议通过执行语句传递 excel 单元格的数据。任何脚本示例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2011-04-23
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
相关资源
最近更新 更多