问一个权限管理问题

ruritanian 2003-08-05 09:52:52
我做一个数据库应用程序,对怎么实现权限管理始终犹豫不决
请各位大虾启发启发。
我有两种考虑:
1.采用sql server自带的安全管理,每一个操作员都对应于数据库的一个账号,这样
安全管理就可以交给数据库来管,当然,应用程序需要维护账号和操作员信息的一致性。但是,数据库中建立用户组和用户的存储过程不能在用户事务中使用,这样一致性维护就有可能有问题。
2.用同一个账号登陆数据库,在数据库中建立用户和用户组表,自己做权限管理,这样做简单些,但是我总觉得这样子似乎安全性比较差。只要稍懂破解技术的就能够获得与登陆账号相同的权限。
不知道各位大虾是怎么解决的?给点意见吧。
...全文
34 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
erigido 2003-08-23
  • 打赏
  • 举报
回复
学习。。。。。
ruritanian 2003-08-08
  • 打赏
  • 举报
回复
我考虑自己把
sp_addlogin
sp_addrolemember
这样的存储过程改写一下,让它们能够在用户定义的事务中用
这样做兼容性似乎不够好,而且微软出于性能考虑,也不推荐
把addlogin这样的事情放在事务中处理,但是我想像增加用户
帐号这样的事情毕竟不常做,性能损失点倒也无所谓,就是兼
容性比较差让人觉得不爽。
各位有什么看法那?
ruritanian 2003-08-08
  • 打赏
  • 举报
回复
自己做也有问题啊,安全性没法保证的。
虽然说密码可以加密存储,
可是由于登录数据库的帐号具有很高的权限,
实际上什么数据都取得出来的。
nboys 2003-08-08
  • 打赏
  • 举报
回复
采用sql server自带的安全管理,每一个操作员都对应于数据库的一个账号,这样
安全管理就可以交给数据库来管,当然,应用程序需要维护账号和操作员信息的一致性。但是,数据库中建立用户组和用户的存储过程不能在用户事务中使用,这样一致性维护就有可能有问题。


可以隔一段时间,比如五分钟,检查表中记录有没有变化,如果有变化,就执行存储过程

create proc test
as
EXEC sp_addlogin 'Albert', 'food', 'TPV-MP'
EXEC sp_adduser 'Albert', 'Albert', 'public'
EXEC sp_addrolemember 'db_owner', 'Albert'
EXEC sp_droprolemember 'db_owner', 'Albert'
EXEC sp_dropuser 'Albert'
EXEC sp_droplogin 'Albert'
aimerL 2003-08-08
  • 打赏
  • 举报
回复
还是觉得 自己做一个用户管理比较好点 和系统在一起的东西也许不知道什么时候就出问题 而且和系统在一起太过于死板 灵活性要差的很多
nboys 2003-08-08
  • 打赏
  • 举报
回复
其它用户都创建在 public 组下,拥有基本权限
这个怎么做?

刚建立的登陆用户本来就属于public组,只要把这个用户添加到一个数据库,本身就拥有public的权限
nboys 2003-08-08
  • 打赏
  • 举报
回复
EXEC sp_addlogin 'Albert', 'food', 'databaseName' --添加登陆
GO
EXEC sp_adduser 'Albert', 'Albert', 'public' --赋予Albert public 的权限
GO
EXEC sp_addrolemember 'db_owner', 'Albert' --把Albert添加到db_owner角色中
GO
EXEC sp_droprolemember 'db_owner', 'Albert' --从db_owner角色中删除Albert
GO
EXEC sp_dropuser 'Albert' --从该数据库中删除Albert
GO
EXEC sp_droplogin 'Albert' --从登陆中删除Albert
ruritanian 2003-08-08
  • 打赏
  • 举报
回复
那还不如说用触发器,或者把存储过程和表更新语句写在一起,
这些都是没问题的,我也知道该怎么实现。
可是你能保证用存储过程添加用户一定就成功么?
如果出错了怎么办?用户表里记录有着个帐号,
可是用这个帐号却无法登录,不就出乱子了么
ruritanian 2003-08-07
  • 打赏
  • 举报
回复
原来以为一个很简单的问题,为什么回答的人这么少啊?
大家不能帮帮我么
cdshelf 2003-08-07
  • 打赏
  • 举报
回复
1。 只创建一个 sa 级别的用户,用来做系统维护(如,创建别的用户)
2。 其它用户都创建在 public 组下,拥有基本权限
3。 用户密码在表中以加密形式保存
4。 创建一个用户权限表,指定用户对各种数据的详细权限
ruritanian 2003-08-07
  • 打赏
  • 举报
回复
继续顶,我就不信没人知道
fanfyj 2003-08-07
  • 打赏
  • 举报
回复
关注
ruritanian 2003-08-07
  • 打赏
  • 举报
回复
cdshelf(cdshelf):
还是老问题
2。其它用户都创建在 public 组下,拥有基本权限
这个怎么做?
用系统的存储过程创建么?由于无法用事务,怎么保证它和权限表的一致性?
如果放在自定义的表里,那么用户用什么帐号来登录数据库呢?
ruritanian 2003-08-06
  • 打赏
  • 举报
回复
随便说点啦,大家谈谈自己的意见么
ruritanian 2003-08-06
  • 打赏
  • 举报
回复
没人回答么?
顶一下
xutaohuang 2003-08-06
  • 打赏
  • 举报
回复
呵呵!关注!!!
txlicenhe 2003-08-06
  • 打赏
  • 举报
回复
study
ruritanian 2003-08-06
  • 打赏
  • 举报
回复
nboys() :你试过么?我试过,就是不行啊
sql server的联机帮助上这么说的:
在用户定义的事务中不能使用 sp_addrolemember。
nboys 2003-08-06
  • 打赏
  • 举报
回复

begin tran

exec ('master..sp_addrolemember ..........')
insert into ..........
if @error <> 0 goto error

commit tran
return

error:
rollback tran
return
ruritanian 2003-08-05
  • 打赏
  • 举报
回复
我希望大家不要光说用哪一种方案,多说说这样做的好处,怎么实现来避免我所担心的问题。
加载更多回复(6)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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