sql server2005 用户权限控制

songguozhi 2010-02-05 01:26:04
我希望在sql server 2005中,限制用户不允许直接进行表的插入、修改、删除操作,而全部通过调用存储过程完成?

哪位有经验的分享一下
...全文
289 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
人鱼传说 2010-02-22
  • 打赏
  • 举报
回复
多人开发时就有这种需求了,我们是创建多用户的方式来实现,比小F说的那样
hzvcan 2010-02-08
  • 打赏
  • 举报
回复
--新建一个登陆,登陆名:qiankun ,密码:147896325,默认数据库:test
sp_addlogin 'qiankun','147896325','test'

--为登录qiankun在数据库test中新建一个用户user1. 如果一个登陆没有对应的用户,则无法登陆
use test
go
sp_adduser 'qiankun','user1'

create table tb(id int primary key,age int)--测试表
create proc p_insert--插入存储过程
@id int,
@age int
as
insert into tb values(@id,@age)

go
create proc p_update--更新存储过程
@id int,
@age int
as
update tb set age=@age where id=@id
go
create proc p_delete--删除存储过程
@id int,
@age int
as
delete from tb where id=@id or age=@age
--授予三个存储过程的权限
grant execute on test..p_insert to user1
grant execute on test..p_update to user1
grant execute on test..p_delete to user1


--以上操作最好有足够的权限
wsr123321 2010-02-07
  • 打赏
  • 举报
回复
管理员应该可以设置吧
songguozhi 2010-02-07
  • 打赏
  • 举报
回复
^^^^^^
songguozhi 2010-02-06
  • 打赏
  • 举报
回复
继续……
--小F-- 2010-02-05
  • 打赏
  • 举报
回复
use 你的库名 
go

--新增用户
exec sp_addlogin 'test' --添加登录
exec sp_grantdbaccess N'test' --使其成为当前数据库的合法用户
exec sp_addrolemember N'db_owner', N'test' --授予对自己数据库的所有权限

--这样创建的用户就只能访问自己的数据库,及数据库中包含了guest用户的公共表
go

--删除测试用户
exec sp_revokedbaccess N'test' --移除对数据库的访问权限
exec sp_droplogin N'test' --删除登录


如果在企业管理器中创建的话,就用:

企业管理器--安全性--右键登录--新建登录

常规项
--名称中输入用户名
--身份验证方式根据你的需要选择(如果是使用windows身份验证,则要先在操作系统的用户中新建用户)
--默认设置中,选择你新建的用户要访问的数据库名

服务器角色项
这个里面不要选择任何东西

数据库访问项
勾选你创建的用户需要访问的数据库名
数据库角色中允许,勾选"public","db_ownew"

确定,这样建好的用户与上面语句建立的用户一样
---------------------------------------------------------------------------

最后一步,为具体的用户设置具体的访问权限,这个可以参考下面的最简示例:

--添加只允许访问指定表的用户:
exec sp_addlogin '用户名','密码','默认数据库名'

--添加到数据库
exec sp_grantdbaccess '用户名'

--分配整表权限
GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用户名]

--分配权限到具体的列
GRANT SELECT , UPDATE ON table1(id,AA) TO [用户名]

-----------------------------------------------------------------------------------------------------

建角色,用户,权限

/*--示例说明
示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/

USE pubs

--创建角色 r_test
EXEC sp_addrole 'r_test'

--授予 r_test 对 jobs 表的所有权限
GRANT ALL ON jobs TO r_test
--授予角色 r_test 对 titles 表的 SELECT 权限
GRANT SELECT ON titles TO r_test

--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC sp_addlogin 'l_test','pwd','pubs'

--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC sp_grantdbaccess 'l_test','u_test'

--添加 u_test 为角色 r_test 的成员
EXEC sp_addrolemember 'r_test','u_test'

--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
DENY SELECT ON titles TO u_test

/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/

--从数据库 pubs 中删除安全账户
EXEC sp_revokedbaccess 'u_test'

--删除登录 l_test
EXEC sp_droplogin 'l_test'

--删除角色 r_test
EXEC sp_droprole 'r_test'

--假设你的用户为bb

--1. 报告孤立用户
USE db
EXEC sp_change_users_login 'Report'
GO


--2. 处理孤立用户
USE db
EXEC sp_change_users_login 'Auto_Fix','bb',null,'bb'





本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/20/4573398.aspx
raohui5 2010-02-05
  • 打赏
  • 举报
回复
最简单的方法是,建个登录名,再建个属于该登录名的用户,最后把执行存储过程的权限给这个用户,就这三步
存储过程权限好像叫什么EX什么什么来着
xman_78tom 2010-02-05
  • 打赏
  • 举报
回复
1、所有权链。
要求存储过程及其引用的对象有一致的所有者,只要用户拥有存储过程的 execute 权限,而不需对操作的表和视图拥有相应的权限,即可通过存储过程操作对象。

2、安全上下文切换。
在存储过程定义中使用 with execute as 子句,用户调用存储过程时,存储过程即在 with execute as 子句指定用户/登陆帐户的安全上下文中运行。
也可以在定义中使用 execute as 语句,在过程中为指定的语句切换安全上下文。

3、模块签名。
首先使用证书或非对称密钥对存储过程进行签名;再使用签名的证书或非对称密钥创建登陆账户或用户帐户;最后为使用证书或非对称密钥创建的账户授权。这样用户在调用存储过程时,过程在“使用证书或非对称密钥创建的账户”中安全上下文运行。

具体信息和使用,参考联机丛书。

叶子 2010-02-05
  • 打赏
  • 举报
回复
数据库里面有角色,有用户。限制用户不允许直接进行表的插入、修改、删除操作 这个可以。
那么这个用户就什么也干不了了。存储过称也不行了。
叶子 2010-02-05
  • 打赏
  • 举报
回复
程序的数据库连接串 用不同的SQL用户登录。
jwwyqs 2010-02-05
  • 打赏
  • 举报
回复
sf

27,579

社区成员

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

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