zoukankan      html  css  js  c++  java
  • Chapter 2 User Authentication, Authorization, and Security(9):防止登录名和用户查看元数据

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/39003679。专题文件夹:http://blog.csdn.net/dba_huangzj/article/details/37906349

    未经作者同意。不论什么人不得以“原创”形式公布,也不得已用于商业用途。本人不负责不论什么法律责任。

            前一篇:http://blog.csdn.net/dba_huangzj/article/details/38944121

    前言:

    在SQL Server 2005之前,全部server和数据库元数据都是全部人可见的。当基于网银的系统把SQL Server实例共享给客户时,有可能能够看到其它用户的信息。

    从2005開始,能够通过控制权限来限制登录名或用户查看不必要的元数据。

    实现:

    假设你须要把数据库对全部登录名隐藏,能够移除public角色上的VIEW ANY DATABASE权限:

    USE master; 
    GO 
    REVOKE VIEW ANY DATABASE TO public;

    同意某些帐号查看全部数据库时。能够创建一个用户自己定义server角色:

    USE master; 
    CREATE SERVER ROLE [DatabaseViewer]; 
    GO 
    GRANT VIEW ANY DATABASE TO [DatabaseViewer]; 
    ALTER SERVER ROLE [DatabaseViewer] ADD MEMBER [Fred];


    注意,master和tempdcb总是对全部登录可见。

    你不能选择性地对某些数据库设置可见。一个登录要么能从【对象资源管理器】中看到全部数据库。要么全部库都不能被看到。

    假设一个登录名被授予VIEW ANY DATABASEserver权限,那么能够在【对象资源管理器】中看到server全部数据库,或者从sys.databases 文件夹视图中查询全部的数据库。

    假设登录名没有这个权限可是映射到某个数据库的用户中,那么它依然不能看到全部数据库。可是能够使用sys.databases返回数据库信息。而且使用USE 数据库命令来切换数据库。

    同意选择性地可见数据库的唯一方式是让登录名作为数据库的owner:

    ALTER AUTHORIZATION ON DATABASE::marketing TO [Fred];

    数据库的owner有数据库内全部权限,可是一个数据库仅仅有一个owner。不能让多个登录名同一时候对一个数据库进行owner设置。 

    在数据库内,能够定义特定数据库对象为某些用户可见。在SSMS中。右键数据库的【安全性】节点,选择【用户】→【属性】中的【安全对象】,然后在【查找】中加入特定对象,比方表、存储过程或者架构。然后勾选【查看定义】的【授予】列:

    image

    也能够用命令实现,这里注意上图中的【脚本】,当你不记得命令时,能够点一下这个button,会自己主动生成代码:

    use [AdventureWorks2012] 
    GO 
    GRANT VIEW DEFINITION ON [dbo].[AWBuildVersion] TO [test] 
    GO

    原理:

    能够用以下语句查看可被授权的元数据权限:

    SELECT  parent_class_desc AS parent , 
            class_desc AS class , 
            permission_name AS permission 
    FROM    sys.fn_builtin_permissions(NULL) 
    WHERE   permission_name LIKE 'VIEW%' 
    ORDER BY CASE parent_class_desc 
               WHEN '' THEN 0 
               WHEN 'SERVER' THEN 1 
               WHEN 'DATABASE' THEN 2 
               WHEN 'SCHEMA' THEN 3 
             END , 
            class , 
            permission;


    【查看定义】的权限是能够在非server范围内查看的权限。

    假设须要在全部范围内查看。须要使用【VIEW ANY DEFINITION】。授予这个权限能够同意登录查看实例中的全部定义,【查看全部数据库】适合那些仅须要訪问数据库可是不须要訪问server其它对象的登录名。

    在数据库中。用户能够看到自己有权限的对象。默认情况下。一个用户仅是public数据库角色的成员,是没有权限的。

    使用db_datareader固定数据库角色能够同意这个用户看到全部表,授予VIEW DEFINITION给存储过程、函数或者触发器,同意你看到其底层代码。

    假设你不想让别人看到,能够在创建对象时使用WITH ENCRYPTION(在兴许介绍。)


    下一篇:http://blog.csdn.net/dba_huangzj/article/details/39473895

  • 相关阅读:
    MVVM框架-MVVMLight
    WPF多值绑定及多值转换(MultiBinding和IMultiValueConverter)
    WPF使用转换器(Converter)
    WPF绑定功能常用属性介绍
    WPF绑定属性
    Java工作笔记:工作中使用JNA调用C++库的一些细节(转载)
    关于使用sudo命令后找不到JAVA_HOME的问题
    IDEA入门级使用教程
    dubbo协议参考手册(转)
    Javascript 基础夯实 —— 使用 webWorker 实现多线程(转)
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7294493.html
Copyright © 2011-2022 走看看