高手请教,有关SQL SERVER 2005权限问题

xx_adam 2007-11-15 11:07:34

假设有这样一个用户,他只能访问某个库的编号为1,2,3的表,他还有权执行 a1这个存储过程,但是a1存储过程中要访问4,5两个表,SQL SERVER 2005这类问题怎么处理?

有没有权威的资料,在帮助里找了好久没有找到!

谢谢!
...全文
452 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2007-11-15
  • 打赏
  • 举报
回复
在上面的示例中, 只授予了用户 test 对表 dbo.t1 的 SELECT 权限, 对存储过程 dbo.p 的 EXECUTE 权限

但用户在执行存储过程时, 可以在存储过程中访问并未授权访问的表 dbo.t2


能够实现这个功能主要是建立存储过程的时候, 使用 EXECUTE AS 选项指定了存储过程中执行时使用的安全上下文(示例使用数据库的所有者dbo)
zjcxc 2007-11-15
  • 打赏
  • 举报
回复
下面的示例演示如何实现楼主的需求
USE tempdb
GO

-- 测试用户
CREATE LOGIN test
WITH PASSWORD = N'abc.124'

CREATE USER test
FOR LOGIN test
GO

-- 测试表
CREATE TABLE dbo.t1(
id int)
INSERT dbo.t1 VALUES(1)
CREATE TABLE dbo.t2(
id int)
INSERT dbo.t2 VALUES(2)
GO

-- 测试存储过程
CREATE PROC dbo.p
WITH EXECUTE AS 'dbo'
AS
SELECT SUSER_SNAME(), * FROM dbo.t2
GO

-- 授权
GRANT SELECT ON dbo.t1
TO test
GRANT EXECUTE on dbo.p
TO test
GO

-- 测试 (模拟 test 用户)
EXECUTE AS LOGIN = 'test'
GO

SELECT SUSER_SNAME(), * FROM dbo.t1
EXEC dbo.p
GO

-- 恢复
REVERT
GO

-- 删除测试
DROP PROC dbo.p
DROP TABLE dbo.t1, dbo.t2
DROP USER test
DROP LOGIN test
xx_adam 2007-11-15
  • 打赏
  • 举报
回复
刚做了一个小测试,以只能访问1、2、3表的这个用户,可以执行a1,可以访问4、5表的,前提是a1是由有权访问4,5这两个表的用户来创建。

有没有高手有相关的资料,提供一点,谢谢!
xx_adam 2007-11-15
  • 打赏
  • 举报
回复
谢谢,了解!

好多

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧