精华内容
下载资源
问答
  • 对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )  正确答案: D 你的答案: D (正确) 公有类型 私有类型 保护类型 友元类型 ...

    对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是(    ) 

    正确答案: D   你的答案: D (正确)

    公有类型
    私有类型
    保护类型
    友元类型


    答案:D
    C++中有三种权限控制类型,分别是共有类型public,私有类型private,保护类型protected.
    友元是声明一个类外的方法具有类方法同样的访问权限,目的是让类外的方法可以访问类内部的属性,不是访问控制属性。

    展开全文
  • 学习过程中整理的关于属性加密技术以及基于属性访问控制技术等信息,供大家参考学习使用。
  • 1. 访问控制的三个基本要素:主体(请求实体)、客体(资源实体)、控制策略(属性集合); 1 2. 发展历程 1 2.1. 示意图: 2 3. 访问控制理论模型: 2 3.1. DAC&MAC模型 2 3.2. IBAC模型:基于身份的访问...

    Atitit 安全技术访问控制 ABAC 与IBAC  RBAC

     

    目录

    1. 访问控制的三个基本要素:主体(请求实体)、客体(资源实体)、控制策略(属性集合); 1

    2. 发展历程 1

    2.1. 示意图: 2

    3. 访问控制理论模型: 2

    3.1. DAC&MAC模型 2

    3.2. IBAC模型:基于身份的访问控制id-Based Access Control 3

    3.3. RBAC模型:基于角色的访问控制(Role-Based Access Control) 3

    3.4. ABAC模型: 3

    3.5. 基于身份的访问控制(IBAC)不 4

    3.6. 基于角色的访问控制(RBAC 4

    4. 他们之间的关系 4

    5. Ref 4

     

     

    1. 访问控制的三个基本要素:主体(请求实体)、客体(资源实体)、控制策略(属性集合);

     

    俗的解释就是“【谁】是否有可以对某个【资源】进行某种【操作】”;可以看出访问控制的三个基本要素:主体(请求实体)、客体(资源实体)、控制策略(属性集合);

    1. 发展历程

     

    访问控制是信息安全的关键技术之一, 它依赖于其他安全服务并与这些服务共存于信息系统中, 从而提供信息安全保障。

    人类使用访问控制技术历史悠久。门锁和钥匙就是一种典型的访问控制。现代访问控制技术起源于20世纪六、七十年代。LAMPSON提出访问控制的形式化和机制描述, 引入了主体、客体和访问矩阵的概念, 它们是访问控制的基本概念[3]。从计算技术早期至今, 对访问控制模型的研究大致经历了以下几个阶段:

     

     

      1. 示意图:

     

     

    1. 访问控制理论模型:
      1. DAC&MAC模型
      • DAC:自主访问控制;
      • MAC:强制访问控制,一般用于多级安全军事系统;
      1. IBAC模型:基于身份的访问控制id-Based Access Control
      • 基于身份的访问控制模型
      • 举例:登录验证
      • 比如Java中使用cookie、session存储回话标识;

     

    传统的访问控制以用户为中心, 使用标识符来表示主体。如果主体是人, 其标识符就是身份证号。在RBAC中, 主体则是角色, 而客体、环境和操作等也是角色

     

      1. RBAC模型:基于角色的访问控制(Role-Based Access Control)
      • 基于角色的访问控制(Role-Based Access Control)
      • 用户、角色、权限
      • RBAC是ABAC的一种单属性特例;
      • 1992年David F.Ferraiolo & D.Richard Kuhn在第十五届国家计算机安全会议上提出;
      • 论文:https://csrc.nist.gov/projects/role-based-access-control
      • 举例:丰趣-小二后台的认证授权模型设计;
      • Spring Security、Apache Shiro、Ali ACL
    • RBAC既可实现MAC, 也可实现DAC。从这个意义上说, RBAC是中性的。从控制强度上说, 它属于强制访问控制。RBAC已经得到广泛应用
      1. ABAC模型:
      • 基于属性的访问控制模型 (Attribute Based Access Control)
      • 举例:阿里云、AWS;

     

     

      1. 基于身份的访问控制(IBAC)不
      2. 基于角色的访问控制(RBAC

     

     

    ABAC是一种为解决行业分布式应用可信关系访问控制模型,它利用相关实体(如主体、客体、环境)的属性作为授权的基础来研究如何进行访问控制。基于这样的目的,可将实体的属性分为主体属性、客体属性和环境属性,这与传统的基于身份的访问控制(IBAC)不同。在基于属性的访问控制中,访问判定是基于请求者和资源具有的属性,请求者和资源在ABAC 中通过特性来标识,而不像IBAC 那样只通过ID 来标识,这使得ABAC 具有足够的灵活性和可扩展性,同时使得安全的匿名访问成为可能,这在大型分布式环境下是十分重要的。

     

     

    1. 他们之间的关系

     

    基于角色的访问控制(RBAC)通过引入角色中间元素,使得权限先经过角色进行聚合,然后再将权限分配给主体,通过这种方式可以简化授权,可将角色信息看成是一种属性,这样RBAC 就成为了ABAC 的一种单属性特例

     

    1. Ref

    系统权限控制体系 _ 心静志远.html

    访问控制技术现状及展望.html

    下一代授权模型:基于属性的访问控制 - 安全牛.html

    展开全文
  • 在一个典型的软件开发场景中,你作为一名开发人员加入到某个项目后,假设是“超人组”,你往往需要访问这个项目的代码库然后才能开始工作。当你的 Team Lead 将你加入 Git Organization 后,你自然可以访问到“超人...

    引言

    引言

    在一个典型的软件开发场景中,你作为一名开发人员加入到某个项目后,假设是“超人组”,你往往需要访问这个项目的代码库然后才能开始工作。当你的 Team Lead 将你加入 Git Organization 后,你自然可以访问到“超人组”的代码仓库,然后就可以愉快的进行开发工作了。但是,当你的任务完成后,可能你需要参与另一个项目,你自然就没有权利去访问“超人组”的代码库,所以你的 TL 会将你移出。这是一个典型的访问控制场景,我们所控制的对象是工程师,资源则是代码仓库

    对于软件工程师来说,类似的场景十分常见,可以说任何一个系统都存在访问控制机制,从操作系统到复杂的云上应用,我们也发明了很多名词、技术来实现类似的功能,但是核心都是为了控制人或者其他对象,能否访问资源。

    Access Control Mechanism (ACM): The logical component that serves to receive the access request from the subject, to decide, and to enforce the access decision.

    RBAC 的缺憾

    对于访问控制模型,大家最熟悉、或者实现最多的就是 RBAC Role Based Access Control,我们通过赋予不同 role 的不同权限来进行访问控制。对于一个主体(往往是组织内的人员或者某个客户端),他可以拥有多个 role 以应对多种不同的操作权限。RBAC 的流行很重要很大程度上是贴近现实生活,方便大家理解与使用,例如老王是销售经理,同时也是技术委员会的成员,我们很自然就给他两个 role:Sales Manager 与 Technology Group Member,而这两个 role 对应的权限也很清晰明确,Sales Manager 可以查看所有的销售数据,并进行修改等,而 Technology Group Member 只能查看技术上的文献,不论是在系统设计还是在运营时,这些名词都与我们的 title 相对应,对于管理人员来说,只是修改不同的 role 对应的权限而已。 当老王专心去做技术研究之后,我们就移除他的 Sales Manager Role,这样他就无法访问销售上的数据了。

    老王失去了 Sales Manager 的 role 后,就无法继续访问销售数据了

    RBAC 在很多时候是管用的,比如我们的系统是面向销售公司或者学校这种组织架构很严整的地方,但是在复杂场景下,RBAC 渐渐就不够用了,它会产生很多虚无的 role 而且在管理和控制上更难:在某个医疗机构中,我们想要控制一个科室内,护士只能访问自己所负责的病人资料时,我们就无法直接使用 nurse 这个 role,我们需要更细粒度的 role 去划分病人老张还是老王,这就会产生和现实不对应的 role,例如:老张的护士,老王的护士。在医院这种病人流动性很大的场景下,频繁的创建和销毁 role 是很容易出问题,我们的确要求很频繁,但是与现实不 match 的虚无的 role 很难管理。

    另一种情况是,如果管理者考虑医疗数据的安全性与隐私性,不希望护士在离开医院后能够访问到病人资料,我们会更加难办,常见的策略要么是在底层网络层进行处理,直接禁止在院外的一切访问,但是很多企业的需求往往是,使用 VPN 我依旧可以访问内部的资源,但是我还是希望基于所在地进行精确的控制,比如看邮件是可以的,但是看财务数据是不行的。在 RBAC 下,我们也可以通过虚拟的 role 来控制,比如下班后给与其 Out of Office 的 role,然后给与这个 role 最小的权限,这自然又需要虚拟的 role 与大量的动态控制。

    给在办公室外的同事创建了与职位不对称的 role

    一般来说,在 RBAC 中滥用 role 所带来的问题被称为 “role explosion”,跟“曹操”与“曹操小时候”这个笑话很类似,但的确我们的访问控制系统中存在很多这样的 role。

    ABAC

    介绍

    所以,直觉上来说我们需要更多的“东西”来进行更精细的访问控制,用来匹配我们复杂的业务场景,同时,我们也希望这个新的模型易于理解和实现,也利于控制与运维,这就是 ABAC —— 基于属性的访问控制 (Attribute Based Access Control) —— 想要解决的问题。简单来说,对于 ABAC 我们判断一个用户是否能访问某项资源,是对其很多不同属性的计算而得到的。

    传统的 RBAC 与 ACL 等访问控制机制中,可以认为是 ABAC 的子集,对于 RBAC,只是我们的访问机制的实现只是基于属性 role 而已,ACL 则是基于属性是 identity 的 AC。

    术语

    要理解 ABAC 首先需要从一些领域内的术语说起,按照我个人的习惯,对于专业性的术语一向是不翻译的,因为的确是受够了每次讨论授权、认证、验权、验证等区别,虽然技术讨论时彼此都理解要说的是什么,但是在场景中这是需要独一无二的、易于理解的名字的(此处插入 DDD 的通用语言),此外还有一个好处就是好写代码,正确的名字可以帮助你的代码易于理解和维护。

    Attribute:属性,用于表示 subject、object 或者 environment conditions 的特点,attribute 使用 key-value 的形式来存储这些信息,比如我在公司的 role 是 developer,role 是 key,developer 是 value,而我的小组昵称袋熊,key 是 team,value 是 wombat。

    Subject:常常指代使用系统的人或者其他使用者(non-person entity,NPE),比如说客户端程序,访问 API 的 client 或者移动设备等等。当然一个 subject 可以有多个的 attributes,就像用户属性这些我们曾经用过的名词一样。

    Object:指代我们这个 ACM 需要管理的资源,比如文件,比如某项记录,比如某台机器或者某个网站,任何你需要进行访问控制的资源都可以称为 object,同样 object 也可以有多项属性,比如袋熊组的桌子,或者洛克组的线上实例,我们也常常使用 resource 来描述这些资源,但是在 ABAC 的环境下,我们称为 object。

    Operation:有了 object 有了 subject,自然就有了 subject 需要做的事情,比如查看某条记录,登录某台服务器,使用某个 SaaS 服务进行报销或者查看候选人的作业。往往包括我们常说的读、写、修改、拷贝等等,一般 operation 是会表达在 request 中的,比如 HTTP method。

    Policy:通过 subject、object 的 attribute 与 environment conditions 一起来判断 subject 的请求是否能够允许的关系表示,比如说:policy 可以用人类语言这样表达,只有袋熊组的人才能访问这几台服务器,或者只有在办公室才能访问这些资源,但对于机器来说,无非就是一个判断语句罢了。当然了,policy 可以是一堆这样 boolean 逻辑判断的组合,比如只有公司的正式员工、并且在公司的六楼区域的网络中,才能访问某个服务。你可以使用 Specification Pattern 来实现 policy,其实没那么复杂。

    Environment Conditions:表示目前进行的访问请求发生时,的操作或情境的上下文。Environment conditions 常常用来描述环境特征,是独立于 subject 与 object 的,常用来描述系统的情况:比如时间,当前的安全等级,生产环境还是测试环境等等。

    基本场景与概念

    一个典型的 ABAC 场景描述如下图,当 subject 需要去读取某一条记录时,我们的访问控制机制在请求发起后遍开始运作,该机制需要计算,来自 policy 中记录的规则,subject 的 attribute,object 的 attribute 以及 environment conditions,而最后会产生一个是否允许读取的结果。

    From NIST 800-162: Basic ABAC Scenario

    1. 尝试访问
    2. ACM 进行计算:subject attributes + object attributes + environment conditions = allow or deny?
    3. 进行访问

    在 NIST 的描述中,我们对 ACM 内部进行进一步的抽象,可以得出这两个核心模块:Policy Decision Point (PDP) 与 Policy Enforcement Point (PEP),如下图:

    PDP + PEP

    所以,实现 ABAC 的核心机制是在请求发起后,subject attributes、object attributes 与 environment conditions 作为输入,PEP 获取规则,PDP 进行计算,最后确定是否有权进行请求。ABAC 的逻辑并不复杂,根据之前我们所画的基本场景与机制的图中,你可以很轻松的开始进行架构设计,往往最开始你需要定义出 subject、object 以及其相关的 attribute,同时你也需要思考,当去进行 object 访问时,你该如何表达 request 以及 operation。

    From NIST 800-162: An Example of ACM Functional Points

    RESTful 是我们常用的设计风格,RESTful 的流行是与 HTTP 协议密不可分的,其中我们很看重 HTTP 协议中的 methods,并且赋予了这些 methods 易于理解的语义,我们会很自然的认为 GET 是获取资源,而 POST 是创建新的资源,PUT 则是修改,使用这些 methods 是与控制资源联系在一起。但是,在 HTTP 协议中,并没有规定 GET 是否可以进行资源上的修改和更新,因为这只是个传输协议罢了,是我们在这个协议之上发明了新的东西,所以也没有“官方的、标准的” RESTful。之所以在这里提到 RESTful 与 HTTP 的关系,是想让大家理解在进行 ABAC 系统设计时,operation 是可以有很多种表达的,而重要的是定义这些 operation 与 request 的关系,你可以使用 SOAP 或者其他协议,或者在 RESTful 之上自己发明一些字段,或者加入进 HTTP header,但是一定需要有清楚的 operation 描述。

    为什么 ABAC 能解决复杂场景下的问题

    在学习 ABAC 的过程中我发现,ABAC 和很多创新一样,并不是因为科技的突破性进展,而只是在 RBAC 的思维上前进了一点,理解 ABAC 的术语时,你能很快的联想到已有的技术实践,比如 AWS IAM。而且,这些术语也如同我们做面向对象编程时,是很好的描述现实的。

    Attribute 易于管理

    我们可以很容易的为不同的用户设计 attribute,往往在很多企业的实现中存在一个 consumer profile 或者 user details 的服务,这些服务中很多字段比如职位、职级、办公室、项目等就是天然的 attribute,对于需要管理的 object,如果是一台虚拟机,那么 IP 地址、归属组织、cost code 等都可以是 attribute,而且因为 attribute 是 K-V 式的,往往一张一对多的表就可以控制好 subject、object 与 attribute 的对应。

    细粒度授权支持

    ABAC 能做到细粒度的授权管理,我们知道,在 policy 中,我们的准许访问的判断是可以写的很灵活的,我们甚至可以判断请求中的某个属性是否满足于一个正则表达式,或者字符串相等(这个很常见,特别是在使用 AWS IAM 做最小权限原则时),我们也可以使用逻辑与、逻辑或的关系自由组合很多不同的访问规则。你可以使用之前提到的 Specification Pattern 很轻松的实现灵活的 policy,解析 JSON 或者 XML 去动态的创建规则,而这些含有规则的 JSON 或 XML,则是可以被编程实现的(可编程的 policy 是动态的授权验权的前提)。你的 policy 甚至可以做到,只有姓张的工程师在某个项目时才能访问某个资源,在 RBAC 的时代,这是很难的。

    访问控制管理成本很低

    ABAC 对系统管理员是友好的,在 RBAC 的时代,如果我需要实现细粒度的资源管理或者经常 subject 与 object 的对应关系经常变动,那么管理员难以操作的,也很容易出现问题,其中常常被采用的解决方案就是创建那些本不应该存在的 role。但是在 ABAC 时代,管理员的管理对象会缩减到 policy,也就是只处理访问控制。我们再回到医疗机构的那个例子中,如果某个护士负责照顾老张,系统管理员只需要新建一个 policy 并写上允许访问即可,当老张出院后,只需要删除或者失效这个 policy 就可以了。在 RBAC 的环境中,你可能需要为某个虚拟的 role 动态的添加 permission,而 permission 如果到了针对单个病人的情况下,是绝对多如牛毛的,特别是有两个叫做老张的病人时。

    往往,我们会使用 JSON 或者 XML 定义这个 policy,那么,这一切都可以完全自动化,而不需要使用管理员点击。再现实一些的话,我们可以完全实现一个审批的流程,如果你使用过 Google Drive,你会对这个请求访问的过程绝不陌生。

    Require Access

    动态的总体控制

    Environment conditions 也能够提供统一的系统级别的控制,比如威胁等级或者按照区域划分安全级别,不同的区域使用 ABAC 时,可能环境上会有变化。例如我们常用红区来表示最高安全级别,那么我们默认就需要 deny 所有请求,并且会触发警报等等,但是在绿区这种办公区域,可能默认所有的请求都是被允许的等等。Environment conditions 可以提供“拉闸”这样的功能,而且它也是可以动态调整的。

    ABAC 在落地上的一些经验和故事

    AWS IAM

    如果谁能作为 ABAC 比较好的实现榜样的话,我第一个想起的就是 AWS IAM 的实现。如果当你的企业正在使用公有云时,对公有云的资源进行控制是非常难以管理的,你当然可以为每个小组安排好虚拟机或者 RDS 之类的,但是这太静态了,而且也不足以细粒度。比如,当我们想实现最小权限原则时就很难办到(例如你的数据库只想被你确定的几台实例所访问到),往往这种需求会实现为,在某个网段内,大家都可以访问到某个数据库或者中间件,那自然是不够理想的。

    公有云的资源是租用的,你可以按照自己的需求动态的扩容或者降低你的资源,那么这种场景下,资源是动态的,而且变化很大(可能会根据流量动态的启动实例或者关闭),那在这种情况下如何做到访问控制与最小权限原则,那你就不能再基于 users 与 roles 进行操作,这时候你就需要 ABAC。好消息是,AWS 作为云计算的领导者,很早就实现了类似的功能,而使用 IAM 则是 operations 的必修课。

    请参考这个视频,来自 AWS Senior Manager,个人认为是讲的最好的 IAM 与 ABAC 介绍

    一些实践经验

    最开始实践 ABAC 是因为我们在进行一个内部云的资源控制项目,在设计时我们参考了 AWS 的玩法,并进行了类似的设计。实际上 ABAC 是与你要管理的资源无关的,更像是一种模式,在云资源控制中大多数 subject 不是用户或者真正的人,而是客户端、实例机器等。实现一个类似 policy 的策略管理并不是很难,主要的工作在管理端的开发以及为客户端提供 SDK 上了,此外还有集成策略。我们也考虑过 XACML & NGAC (Next Generation Access Control) 去描述 policy 或者直接使用,但 XACML 过于复杂以及并不成熟,最后还是采取了自研的策略。故事这里是很多的,但是篇幅有限不予展开。

    总结

    ABAC 在概念上的设计的确是有先进性的,对于有 RBAC 知识的人,ABAC 不难理解,也就是“基于用户属性进行访问权限判断”,但是当我去阅读 NIST 的文章或者参考 XACML 实现时,却担心 ABAC 的复杂实现,毕竟 NIST 给与的企业级实现考虑的长度占文章的一半。对于 ABAC 的概念,这并不是复杂度的来源,而是授权这件事本身的复杂性,对于系统的设计者与管理者来说,一旦需要关注细粒度的授权管理,那么复杂是无法避免的。

    微服务的流行与 ABAC 的配合值得写另一篇文章,特别是分布式身份验证之后,怎么做到分布式的授权与验权,怎么实现 PEP、PDP 等 ABAC 提倡的模块设计,这些东西可否做成应用程序透明的方式,可否与 security sidecar 集成等等,这些都是可以进一步完善的。

    业务人员希望有一种业务语言能够描述授权策略,但是 gap 在于技术人员无法理解与实现,对于 ABAC 这种授权模式中,我们需要的是一位能够同时说业务与技术两种语言的人,将真正的业务需要转为技术语言,从而指导落地。

    参考文献

    展开全文
  • C++访问控制符详解

    千次阅读 2017-04-26 14:10:30
    (1)一个类的所有成员函数都可以访问他的所有成员(函数或变量),想一想,C++的封装原则是不让别人看见他的私有成员,是的,别人不能访问,但是它自己在设计的时候总要访问吧,那不然还有谁能访问呢?(2)类的...

    一、前言

        C++标准中定义了三种类成员访问控制符:public、protected和private,分别译为公有的、保护的、私有的。当然,这是在一个类的内部声明这三种控制符的意思,那要是在一个继承体系中会是怎么样的呢?

    二、控制符访问特点

        首先说明这三种访问控制符各自的访问控制特点,指出这三种控制符声明的变量可以被哪些实体访问:

        (1)public成员:能被本类的成员函数(不管是哪一种控制符声明的成员函数,都可以)、友元函数、本类的对象、其派生类的成员函数(不管是哪一种控制符声明的成员函数,都可以);

        (2)protected成员:能被本类的成员函数(不管是哪一种控制符声明的成员函数,都可以)、友元函数、其派生类的成员函数(不管是哪一种控制符声明的成员函数,都可以);

        (3)private成员:能被本类的成员函数(不管是哪一种控制符声明的成员函数,都可以)、友元函数;

    通过以上介绍,可以总结为:

        (1)对类的用户而言,即使用类对象实例的人(还有一种说法就是指只能看到类的头文件的人,因为设计类的人都将他写的实现文件编译成了二进制文件,在Windows下是.lib、.obj后缀的文件),通过类对象实例,只能访问到类的public成员(函数或变量);

        (2)对类本身而言,即类的设计者,在设计类的过程中,他可以通过类的所有的成员函数(三种控制符声明),或者友元函数访问其类内部所有的成员(函数或变量),不管其要该成员(函数或变量)是用哪一种控制符声明的,都可以访问。

        (3)对该类的派生类而言,到这里只能说基类的public、protected的成员对它来说是可见的,即可以访问,但具体怎么访问,这涉及到了C++类继承的知识,接下来会重点解释这一条。

    三、C++访问控制与继承

        在一个继承体系中,会涉及到两层访问控制符,一层在类的派生列表中,另一层则是在基类中。庞大而复杂的继承体系看起来是不好理解的(其实也确实不好理解,哈哈),但它归根结底是单层继承的扩展,所以这里我就以单层public继承结构来说明C++访问控制与继承的关系,继承结构为Drived  :public Base。

        既然这里涉及到继承,那先必须要理解的一点就是C++继承体系中派生类的对象模型,这在C++Primer和《深度探索C++对象模型》都有解释,即派生类的内存模型主要包括两部分:基类部分和派生类部分,其中基类部分是从基类继承而来的,派生类部分是自己定义的。

        上述第一层访问控制符(即派生列表中)影响的是派生类中基类部分成员(函数或变量)的访问控制权限(也仅仅只有这一点影响),具体的影响为:

            (1)public继承(保持不变):派生类中基类部分的成员(函数或变量)的访问控制权限和其在基类中声明的权限一样;

            (2)protected继承(各自降低一个权限):基类中public成员在派生类中变成protected权限,其他成员都变为private权限;

            (3)private继承(全部私有化):派生类中基类部分的成员(函数或变量)的访问控制权限全部变为private成员。

    特别注意:基类中的private成员在派生类中任何控制类型的成员函数中都不能访问(具体可见后面的程序编译结果)。

    好,现在解释了第一层访问控制符,那么派生类中所有成员(基类部分由上面的可以解释,派生类部分本身就已经声明)的访问控制权限都确定了,那现在的问题就是能不能访问了。

        针对这里的单层public继承结构的例子,基类部分的成员的访问控制权限保持不变,下面分三种情况进行解释:

            (1)基类部分的public成员。请注意,尽管派生类的内存模型分为两部分,但这两部分都属于派生类对象。所以派生类(类本身)的所有成员函数(不管哪一种访问控制符)都访问基类部分的public成员(函数或变量),同时派生类对象也直接可以访问(通过成员访问操作符)。

            (2)基类部分的protected成员。派生类(类本身)的所有成员函数(不管哪一种访问控制符)都访问基类部分的protected成员(函数或变量),但派生类对象不能直接访问(基类对象自己都不能访问它的protected成员,派生类当然不可以)。

            (3)基类部分的private成员。派生类(类本身)的所有成员函数(不管哪一种访问控制符)都不能访问基类部分的private成员(函数或变量),同样派生类对象也不能直接访问

    下面对以上三种情况在VS2010中进行测试,这里只进行编辑,VS2010自动检错功能就能提示相应错误

    class Base
    {
    public:
    	int pub_mem;
    protected:
    	int pro_mem;
    private:
    	int pri_mem;
    
    //对类自身来说,其成员函数,无论何种权限说明,都可以访问类中的任何权限的成员变量
    public:
    	int base_fun_pub() {}
    protected:
    	int base_fun_pro() {}
    private:
    	int base_fun_pri() {}
    };
    
    class Drived: public Base
    {
    //pub、pro、pri成员函数都能访问其基类部分的public、protected成员变量,但都不能访问private成员
    public:
    	int drived_fun_pub()
    	{
    		pub_mem = 0;     //情况(1)
    		pro_mem = 0;     //情况(2)
    		pri_mem = 0;     //情况(3)(错误,不能访问)
    	}
    protected:
    	int drived_fun_pro()
    	{
    		pub_mem = 0;    //情况(1)
    		pro_mem = 0;    //情况(2)
    		pri_mem = 0;    //情况(3)(错误,不能访问)
    	}
    private:
    	int drived_fun_pri()
    	{
    		pub_mem = 0;   //情况(1)
    		pro_mem = 0;   //情况(2)
    		pri_mem = 0;    //情况(3)(错误,不能访问)
    	}
    private:
    	int j;
    };
    
    void main()
    {
    	/******************单层public继承为例**********************/
    	Drived drivedobj;
    	drivedobj.pub_mem;    //情况(1)
    	drivedobj.pro_mem;    //情况(2)(错误,不能访问)
    	drivedobj.pri_mem;    //情况(3)(错误,不能访问)
    }

    在VS2010中显示的结果是(自动下划红线提示的就是访问权限错误):

    四、总结

        其实不管继承还是不继承,都可以当做是在一个单层类(没有继承)中进行访问控制权限分析,因为在继承情况下无非是多了一个继承列表中的访问控制符,这个控制符影响的是基类中的成员在派生类中是什么样的访问权限(只有这一点影响),而这点影响非常好解释(见上面第三节解释),一旦解释了派生列表中的访问控制符,就可以视为一个单一类的成员来访问,所以,解释一个类的成员访问权限的步骤为:

        1、如果是派生类,记住两点

            (1)先解释派生列表中的控制符,确定基类中各成员在派生类中是什么属性;

            (2)对派生类而言,派生类对象只能访问基类中原有属性为public的成员,派生类本身(成员函数)只能访问基类中原有属性为protected和public的成员(注意,是原有属性,不管经过派生列表访问控制符解释之后的属性是什么)。

        2、如果不是派生类

            (1)其对象只能访问public属性的成员;

            (2)对于类的接口实现代码(所有三种属性的成员函数)来说,它能访问所有访问权限的成员。

        所以说,对于继承体系来说,无疑就多出了一层疑惑:即基类中成员到了派生类中是什么访问属性的?一旦解决了这个问题,那就变成了单一类的访问问题了。

    展开全文
  • python类私有属性访问控制

    千次阅读 2018-04-12 23:12:51
    不同于c++,java这些编译型语言Pyt,hon根本没有访问控制,只有变量名压缩…这么说的要么是大神,要么是像我这样钻牛角尖的… 首先看一段代码,我们想对象的一个属性只能被这个这个对象(即通过类里定义的方法来访问)所...
  • 属性加密技术 基于身份的加密体制简介 基于身份的加密体制可以看作一种特殊的公钥加密,它有如下特点:系统中用户的公钥可以由任意的字符串组成。这些字符串可以是用户在现实中的身份信息,如:身份证号码、用户姓名...
  • 类成员的访问属性

    千次阅读 2018-06-23 09:02:42
    (1)基类的成员函数可以访问基类成员,派生类的成员函数可以访问派生类成员。 私有数据成员只能被同一类中的成员函数访问,公用成员可以被外界访问。 (2)基类的成员函数只能访问基类的成员,而不能访问派生类...
  • ABAC基于属性访问控制

    万次阅读 2018-08-20 10:51:03
    常用的基于角色的访问控制,最近研究关于基于属性访问控制,感觉这个东西确实是个好东西,把自己的研究内容拿出来跟大家分享下。先简单了解下    用户在携带自身的属性值包括主题属性,资源属性,环境属性,...
  • 类成员的三种访问属性

    万次阅读 2017-03-27 10:35:38
    在一个类中,有三种不同访问属性的成员:public、protected、private。 在类的内部(类的声明和类的定义)可以访问public、protected、private所有成员 在类的外部(对象和其他函数)不能访问private和protected...
  • 第一章 访问控制的概念  访问控制分类  网络访问控制  主机/操作系统访问控制  应用程序访问控制  加密方式在访问控制系统中的应用 第二章 强制访问控制与自主访问控制  强制访问控制(MAC)  ...
  • 数据安全-访问控制

    千次阅读 2018-10-17 16:14:44
    数据安全-访问控制访问控制的应用场景访问控制的概念访问控制的三要素访问控制与身份认证的关系访问控制的类型自主访问控制强制访问控制常用安全模型-BLP安全模型(Bell-Lapadula security model)安全模型-BLP安全...
  • ECMA-262定义了内部才用的特性是为了实现JavaScript...属性 访问,就是我么平常接触的用户赋什么值,它们就返回什么,不会做额外的事情。 数据属性有4个描述其行为的特性(为了表示内部值,把属性放在两对方括号中),
  • 身份认证与访问控制

    千次阅读 2019-10-23 14:09:05
    身份认证与访问控制 身份认证技术概述 身份认证的概念和种类 多数银行的网银服务,除了向客户提供U盾证书保护模式外,还推出了动态口令方式,可免除携带U盾的不便,这是一种动态密码技术,在使用网银过程中,输入...
  • java四种访问控制权限的总结

    万次阅读 多人点赞 2018-03-09 10:59:47
    今天看了一眼java基础,看到了java的类成员访问控制权限这部分,不觉有些混乱,所以在这里梳理一下。 java有四种访问控制权限:private,protected,public,default。他们的具体访问权限都是什么呢,我用例子来...
  • 访问控制模型(DAC,MAC,RBAC,ABAC)

    万次阅读 2019-09-12 19:21:09
    项目中需要加入访问控制,对访问控制模型做了一些调研, 本文主要是介绍一些常用的访问控制模型。 基本要素 访问控制模型包括三个要素,即: 主体(Subject) 指主动对其它实体施加动作的实体 客体(Object) 是被动...
  • RBAC(基于角色的访问控制权限的基本模型)

    万次阅读 多人点赞 2018-10-26 00:48:12
    RABC(Role-Based Access Control),也就是所谓的**“基于角色的访问控制权限”**。 2.优势 在RABC中,用户不再直接与权限相连,而是通过**“角色”**这一属性来间接的被赋予权限,用户通过成为适当的角色来的到...
  • windows访问控制列表ACL

    千次阅读 2019-07-15 12:56:32
    文章目录术语定义分类DACLSACL安全对象(so) &...windows访问控制列表 --ACL(Access Control List) 关于授权(authorization) 与 访问控制(Acess Control) 微软官网详细介绍: https://docs.microsoft.com/zh-cn...
  • 强制访问控制

    万次阅读 2016-08-06 14:01:42
    1. 强制访问控制MAC是强加给访问主体的,即系统强制主体服从访问控制政策 2. 安全标签: a) 强制访问控制对访问主体和受控对象标识两个安全标签,一个是具有偏序关系的安全等级标签,另一个是非等级分类标签,...
  • 访问控制列表--标准ACL

    万次阅读 多人点赞 2018-07-05 12:23:04
    访问控制列表(Access Control List,简称ACL)是根据报文字段对报文进行过滤的一种安全技术。访问控制列表通过过滤报文达到流量控制、攻击防范以及用户接入控制等功能,在现实中应用广泛。ACL根据功能的不同分为标准...
  • Python开发中如何访问私有属性

    千次阅读 2018-09-01 17:52:09
    当我们定义一个类的时候,有时候会定义一个私有属性来辅助开发。在其它语言中经常会用到 private 来修饰这个属性为私有属性。可是你知道么?同样为私有属性,有的开发语言中是真私有属性,有的是假私有属性。 例如 ...
  • 说说关于访问控制模型

    万次阅读 2016-01-22 15:48:47
    也就说一下对访问控制的理解,表示我还是一个研究生。 在信息环境中,访问控制主要用来确保信息不会被非法访问。在访问控制的安全机制中,经过合法授权的实体能够对请求的资源进行合法的访问,而未经过授权的实体则...
  • 访问控制模型详细介绍

    千次阅读 2020-07-09 19:49:55
    1.访问控制模型 为用户对系统资源提供最大限度共享的基础上,对用户的访问权进行管理,防止对信息的非授权篡改和滥用。保证用户在系统安全策略下正常工作,拒绝非法用户的非授权访问请求,拒绝合法用户越权的服务...
  • 数据库的访问控制

    千次阅读 2019-11-27 21:49:51
    访问控制概述 基本任务 防止非法用户进入系统及合法用户对系统资源的非法使用,它保证主体对客体的所有直接访问都是经过授权的。通俗说访问控制机制就是决定用户及代表一定用户利益的程序能做什么。 安全访问控制...
  • Android中的安全与访问权限控制

    千次阅读 2016-04-26 13:39:16
    这些组件中都包含android:permission属性,设置这个属性就可以控制访问该组件的权限。 Activity permissions权限限制了谁才可以启动相应的activity。Permission会在Context.startActivity()和Activity....
  • 密文策略基于属性加密(CP-ABE)访问树构造与解密

    万次阅读 多人点赞 2017-03-24 19:33:50
    在密文策略基于属性加密方案中,最难理解的过程莫过于访问树的构造和从访问树中解密出访问树的秘密数,本文从访问树的构造和从访问树中解密出访问树的秘密数进行讨论。  1. 构造访问树  在CP-ABE方案中,访问树...
  • 1.关于Java中的访问控制 Java语言中,通过访问(权限)控制符来隐藏类中的具体实现。类不但将数据结构和对数据结构进行的访问和操作进行类封装;而且对封装后的成员通过访问控制符,该隐藏的隐藏,该暴露的暴露。...
  • 在 Java 语言中提供了多个作用域修饰符,...本文将详细介绍访问控制修饰符。 在实际生活中,如果要获取某件物品,与其直接穿过堡垒的墙壁,从而导致墙壁毁灭和破坏,不如通过门口的警卫请求进入堡垒的许可。一般而言...
  • 信息安全之访问控制策略

    千次阅读 2021-01-18 20:44:06
    信息安全之访问控制策略1.自主访问控制2.强制访问控制3.基于角色的访问控制4.基于任务的访问控制5.基于对象的访问控制 1.自主访问控制 根据主体的身份及允许访问的权限进行决策。 自主是指具有某种访问能力的主体...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 794,694
精华内容 317,877
关键字:

访问控制属性