那第一种方法怎么能保证用户帐号和用户表里的信息的一致性呢?
比如说我用sp_addrolemember建立一个数据库用户A,同时这个用户对
应与雇员表里的employeeA,那么我必须建立一个记录用来存储这个关系,
这就需要sp_addrolemember和建立关系的insert语句在同一个事务中实现,
可是sp_addrolemember是不能够放在事务处理中的,这怎么办呢?
比如说我用sp_addrolemember建立一个数据库用户A,同时这个用户对
应与雇员表里的employeeA,那么我必须建立一个记录用来存储这个关系,
这就需要sp_addrolemember和建立关系的insert语句在同一个事务中实现,
可是sp_addrolemember是不能够放在事务处理中的,这怎么办呢?
解决方案 »
- 问一个比较菜的问题!!!建立视图时添加表时,表之间的关系自动就加上。这是怎么实现的?
- 有没有一个比较简单的办法提取(获得)一个数据库的所有表结构,视图,存储过程和一部分表的数据?
- 在线求助关于SqlServer2005的数据库连接问题
- 求详解!!!!各路高手求帮忙!!菜鸟
- 如何用触发器使两个表同步
- 求:关于分页显示的存储过程代码. 急!!!
- 如果计算数据库中某一个表所占用的物理空间(表大小)
- 求一条SQL语句,望各位仁兄帮忙!
- 怎么用java编写web页能够连接访问并操作analysis manager的多维数据立方体?
- 字段A相同的记录 字段B拼接 为一条记录
- 有没有人明白这是什么????
- 请问造成SQL2000服务不能启动的原因有哪些?
begin tranexec ('master..sp_addrolemember ..........')
insert into ..........
if @error <> 0 goto errorcommit tran
returnerror:
rollback tran
return
sql server的联机帮助上这么说的:
在用户定义的事务中不能使用 sp_addrolemember。
2。 其它用户都创建在 public 组下,拥有基本权限
3。 用户密码在表中以加密形式保存
4。 创建一个用户权限表,指定用户对各种数据的详细权限
还是老问题
2。其它用户都创建在 public 组下,拥有基本权限
这个怎么做?
用系统的存储过程创建么?由于无法用事务,怎么保证它和权限表的一致性?
如果放在自定义的表里,那么用户用什么帐号来登录数据库呢?
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
这个怎么做?刚建立的登陆用户本来就属于public组,只要把这个用户添加到一个数据库,本身就拥有public的权限
安全管理就可以交给数据库来管,当然,应用程序需要维护账号和操作员信息的一致性。但是,数据库中建立用户组和用户的存储过程不能在用户事务中使用,这样一致性维护就有可能有问题。
可以隔一段时间,比如五分钟,检查表中记录有没有变化,如果有变化,就执行存储过程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'
sp_addlogin
sp_addrolemember
这样的存储过程改写一下,让它们能够在用户定义的事务中用
这样做兼容性似乎不够好,而且微软出于性能考虑,也不推荐
把addlogin这样的事情放在事务中处理,但是我想像增加用户
帐号这样的事情毕竟不常做,性能损失点倒也无所谓,就是兼
容性比较差让人觉得不爽。
各位有什么看法那?