AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 19459
Accepted
Rachel
Rachel
Asked: 2012-06-19 10:26:29 +0800 CST2012-06-19 10:26:29 +0800 CST 2012-06-19 10:26:29 +0800 CST

有没有办法设置用户运行 SP,但不访问基础数据表?

  • 772

我们在两个链接的独立服务器盒上有两个数据库实例。网站用户需要能够在 DatabaseA 上运行查询 DatabaseB 表的存储过程,但是它不应该能够直接从 DatabaseB 上的表中读取。

在 Sql Server 2005 中可能发生这样的事情吗?

简单地创建一个存储过程并授予 Web 用户执行它的权限会返回错误Access to the remote server is denied because no login-mapping exists.

我真的不想让网站用户帐户免费访问 DatabaseB 表。

更新

Aaron 关于使用的建议EXECUTE AS OWNER无效,因为Owner无权访问 DatabaseB。

使用EXECUTE AS 'UserWithPermissions'返回错误Access to the remote server is denied because the current security context is not trusted。在线查看使我相信这是因为数据库未标记为TRUSTWORTHY,因此远程数据库拒绝连接。我怀疑如果两个数据库实例在同一台服务器上它会工作正常。

我不想设置网络数据库,TRUSTWORTHY因为它的一些安全性更宽松,所以我选择了 Aaron 的另一个选项:创建一个用户DatabaseB,只能访问包含网站应该访问的数据的几个特定视图,然后进入链接服务器对象的安全属性,并设置网站用户在访问链接服务器时以新的受限用户身份登录。

这允许我的网站用户对私有数据库中的特定数据具有有限的访问权限,而无需授予其对任何基础表的访问权限。

sql-server-2005 stored-procedures
  • 2 2 个回答
  • 1360 Views

2 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2012-06-19T10:29:15+08:002012-06-19T10:29:15+08:00

    你不能让程序 A 运行execute as ownerorexecute as 'db user tied to security account associated with linked server'吗?这样调用者的权利就不必转移......

    或者,您可以在远程服务器上创建一个只能执行您想要的查询的登录名,并向服务器 A 上现有的链接服务器添加一个模拟帐户,让本地 Web 服务器登录名模拟服务器 B 上的新登录名。

    • 4
  2. Kittoes0124
    2015-11-26T10:49:57+08:002015-11-26T10:49:57+08:00

    我更喜欢用模块签名来解决这类问题:

    use [<DatabaseName>];
    go
    
    create certificate <CertificateName>
        encryption by password = 'CorrectHorseBatteryStaple1!'
        with subject = 'Signing Certificate for Module: <Object>';
    
    add signature to object::<Schema>.<Object>
        by certificate <CertificateName>
        with password = <CertificatePassword>;
    go
    
    grant execute on <Schema>.<Object>
        to <LoginName>;
    
    backup certificate <CertificateName>
        to file = <Location>;
    go
    
    -- create certificate in master
    use [master];
    go
    
    create certificate <CertificateName>
        from file = <Location>;
    

    将过程更改为execute as owner并将<LoginName>能够按预期使用它,而无需授予基础对象。您仍然必须以某种方式处理跨服务器权限,但这使得跨数据库部分变得容易。

    • 0

相关问题

  • 有人在实践中使用过 sqlcmd 模式吗?[关闭]

  • 是否有人使用 SQL Server 功能来创建按编号区分的存储过程组?

  • 如何在不安装新实例的情况下更改 MS SQL 2005 中的实例名称?

  • MySQL 存储例程中的动态 SQL

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve