zoukankan      html  css  js  c++  java
  • SQL server 语句新建用户、对用户授权、删除用户实例

    Grant select on tb to db_user
    --给db_user用户授权 tb表 查询权限
    一、命令操作

    USE mydb

    GO

    --1. 新建测试用户

    --1.1 添加登录用户和密码

    EXEC sp_addlogin N'tony','123'

    --1.2 使其成为当前数据库的合法用户

    EXEC sp_grantdbaccess N'tony'

     

    --2.设置操作授权

    --2.1 授予对自己数据库的所有权限

    EXEC sp_addrolemember N'db_owner', N'tony'

     

    --2.2 以下是设置具体操作权限

    --授予tony对所有用户表的操作权限

    GRANT SELECT,INSERT,UPDATE,DELETE TO tony

    --授予tony SELECT,UPDATE到具体的表

    GRANT SELECT,UPDATE ON tb TO tony

    --授予tony SELECT,UPDATE到具体的表和列

    GRANT SELECT,UPDATE ON tb(id,col) TO tony

    --禁止tony对所有用户表的操作权限

    DENY SELECT,INSERT,UPDATE,DELETE TO tony

    --禁止tony SELECT,UPDATE到具体的表

    DENY SELECT,UPDATE ON tb TO tony

    --禁止tony SELECT,UPDATE到具体的表和列

    DENY SELECT,UPDATE ON tb(id,col) TO tony

    --删除tony 对所有用户表的授权信息

    REVOKE SELECT,INSERT,UPDATE,DELETE TO tony

     

    --授予tony对具有创建表、视图、存储过程等的操作权限

    GRANT CREATE TABLE,CREATE VIEW,CREATE PROC TO tony

    --禁止tony对具有创建表、视图、存储过程等的操作权限

    DENY CREATE TABLE,CREATE VIEW,CREATE PROC TO tony

    --删除tony对具有创建表、视图、存储过程等的授权信息

    REVOKE CREATE TABLE,CREATE VIEW,CREATE PROC TO tony

     

    GO

    --注:更多相关授权信息参考后面的附表中“数据库权限”列。

     

    --3. 删除测试用户

    EXEC sp_revokedbaccess N'tony' --移除用户对数据库的访问权限

    EXEC sp_droplogin N'tony' --删除登录用户

    GO

     

     

    二、手动分配

     

    一、需求

    在管理数据库过程中,我们经常需要控制某个用户访问数据库的权限,比如只需要给这个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限。写这篇文章就是说明下这个操作过程。

    其实这只是SQL Server权限管理很简单的一小块,有些地方并没有深入理解和讲述,只是希望对一些刚入门的童鞋有帮助,其它大侠就当是:我当堂吓一跳,然后得啖笑。(赌圣)

     

    二、操作步骤

    1.      首先进入数据库级别的【安全性】-【登录名】-【新建登录名】


    图1:新建登录名

    2.      在【常规】选项卡中,如下图所示,创建登陆名,并设置默认的数据库


    图2:设置选项

    3.      在【用户映射】选项卡中,如下图所示,勾选需要设置的数据库,并设置【架构】,点击【确认】按钮,完成创建用户的操作


    图3:选择对应数据库

    4.      现在我们就可以对TestLog数据库中的User表进行权限的设置了,【表】-【 属性】


    图4:选择对应表

    5.      在【权限】选项卡中,如下图所示,依此点击【添加】-【浏览】-【选择对象】

     

    图5:设置访问表的用户

    6.      在上面点击【确认】后,我们就可以下面的列表中找到对应的权限,如果你还想细化到列的权限的话,右下角还有一个【列权限】的按钮可以进行设置,点击【确认】按钮就完成了这些权限的设置了


    图6:权限列表

    7.      现在就使用TestUser用户登陆数据库了,登陆后如下图所示,现在只能看到一个表了


    图7:效果

     

    三、注意事项

    1.      在上面的第3步骤中需要注意:如果这里没有选择对应的数据库的话,之后去TestLog数据库中是找不到TestUser。


    图8:找不到TestUser用户

    2.      在上面的第3步骤,设置完TestLog数据后,需要点击【确认】按钮,完成创建用户操作,如果这个时候去设置【安全对象】,是无法在【添加】-【特定对象】-【对象类型】-【登陆名】-【浏览】中找到刚刚新建的TestUser用户的。

    3.      其 实在数据库级别的【安全性】创建的用户是属于全局的,当设置了某个数据库,比如TestLog之后,这个用户就会出现在这个数据库的【安全性】列表中。如 果删除TestLog这个用户,会出现下面的提示。删除了后,这个用户就无法登陆了。需要去对应的数据库中删除用户,如果没有删除又创建,是会报错的。


    图9:删除TestUser用户

    4.      在第6步的【显式权限】列表中,如果选择了【Control】这个选项,那么在【Select】中设置查询【列权限】就没有意义了,查询就不会受限制了。如果设置【列权限】,在正常情况下会显示下图的报错信息:


    图10:效果

    5.      在TestLog数据库的【安全性】-【TestUser】-【属性】-【安全对象】-【添加】-【对象类型】这里有更多关于数据库级别的一些对象类型可以设置。


    图11:其它对象类型

  • 相关阅读:
    SQL里的EXISTS与in、not exists与not in
    N秒后自动跳转
    Array类型的扩展
    css中block与inline的区别
    数据绑定表达式语法(Eval,Bind区别)
    case
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较 (转载)
    内容随鼠标漂移
    IIS下下伪静态html(URL Rewrite)设置方法
    sql查询含有某列名的所有表
  • 原文地址:https://www.cnblogs.com/elves/p/4241903.html
Copyright © 2011-2022 走看看