在SQL Server 中,使用系统的存储过程管理登录名,主要包括:
sp_addlogin sp_droplogin sp_helploginssp_grantlogin sp_revokelogin sp_denylogin
以下代码实现简单的三层权限:
use S100801A
go
-- ======================= 数据库登录 =======================
-- 添加登录用户(sp_addlogin '用户名','密码','默认数据库名')
exec sp_addlogin N ' xg ',N ' xg123 '
-- 或者
exec sp_addlogin N ' xg ',N ' xg123 ',N ' master '
-- 移除登录用户
exec sp_droplogin N ' xg '
-- ======================= 数据库访问 =======================
-- 添加数据库访问用户(sp_grantdbaccess '用户名','数据库名')
use S100801A
go
exec sp_grantDBaccess N ' xg ',N ' db_xg '
-- 移除数据库访问用户
exec sp_revokeDBaccess N ' db_xg '
-- ======================= 数据库权限 =======================
-- 授予对数据库的所有权限(sp_addRoleMember '角色','用户')
exec sp_addRoleMember N ' db_owner ',N ' db_xg '
-- 只能访问自己的数据库,及guest用户的公共表
-- 移除对数据库的所有权限(sp_dropRoleMember '角色','用户')
exec sp_dropRoleMember N ' db_owner ',N ' db_xg '
go
-- ======================= 数据库登录 =======================
-- 添加登录用户(sp_addlogin '用户名','密码','默认数据库名')
exec sp_addlogin N ' xg ',N ' xg123 '
-- 或者
exec sp_addlogin N ' xg ',N ' xg123 ',N ' master '
-- 移除登录用户
exec sp_droplogin N ' xg '
-- ======================= 数据库访问 =======================
-- 添加数据库访问用户(sp_grantdbaccess '用户名','数据库名')
use S100801A
go
exec sp_grantDBaccess N ' xg ',N ' db_xg '
-- 移除数据库访问用户
exec sp_revokeDBaccess N ' db_xg '
-- ======================= 数据库权限 =======================
-- 授予对数据库的所有权限(sp_addRoleMember '角色','用户')
exec sp_addRoleMember N ' db_owner ',N ' db_xg '
-- 只能访问自己的数据库,及guest用户的公共表
-- 移除对数据库的所有权限(sp_dropRoleMember '角色','用户')
exec sp_dropRoleMember N ' db_owner ',N ' db_xg '
/*==========================================================================
重要事项:
后续版本的 Microsoft SQL Server 中,将删除使用‘系统存储过程’实现访问权限的相关功能。
为了避免在新的开发工作中使用该功能,应着手修改实现该功能的方式。
==========================================================================*/
重要事项:
后续版本的 Microsoft SQL Server 中,将删除使用‘系统存储过程’实现访问权限的相关功能。
为了避免在新的开发工作中使用该功能,应着手修改实现该功能的方式。
==========================================================================*/
改用实现方式如下:
--
以下示例首先创建名为‘xg’且具有密码的服务器登录名,
-- 然后在数据库‘S100801A’中创建用户‘abo_xg’对应登录名‘xg’。
-- 添加登录用户
create login xg with password = ' xg123 ';
-- 移除登录用户
drop login xg;
-- 添加数据库访问用户
use S100801A;
create user dbo_xg for login xg;
go
-- 移除数据库访问用户
use S100801A;
drop user dbo_xg;
go
-- 分布权限
grant insert, select, update, delete on students to public -- dbo_xg
revoke insert, select, update, delete on students from public -- dbo_xg
-- grant all on Students to aa_0801
-- revoke all on students from aa_0801
-- 然后在数据库‘S100801A’中创建用户‘abo_xg’对应登录名‘xg’。
-- 添加登录用户
create login xg with password = ' xg123 ';
-- 移除登录用户
drop login xg;
-- 添加数据库访问用户
use S100801A;
create user dbo_xg for login xg;
go
-- 移除数据库访问用户
use S100801A;
drop user dbo_xg;
go
-- 分布权限
grant insert, select, update, delete on students to public -- dbo_xg
revoke insert, select, update, delete on students from public -- dbo_xg
-- grant all on Students to aa_0801
-- revoke all on students from aa_0801
本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2011/01/20/1940245.html,如需转载请自行联系原作者