精华内容
下载资源
问答
  • 我们访问文件需要先取得相应的访问权限,而访问权限是通过 Linux 系统中的安全模型获得的。对于 Linux 系统中的安全模型,我们需要知道下面两点Linux 系统上最初的安全模型叫 DAC, 全称是 Discretionary Access ...

    这里,我们主要介绍 Linux 系统中,权限控制的基本原理。

    安全模型

    在 Linux 系统中,我们所有的操作实质都是在进行进程访问文件的操作。我们访问文件需要先取得相应的访问权限,而访问权限是通过 Linux 系统中的安全模型获得的。

    对于 Linux 系统中的安全模型,我们需要知道下面两点

    Linux 系统上最初的安全模型叫 DAC, 全称是 Discretionary Access Control ,翻译为自主访问控制。

    后来又增加设计了一个新的安全模型叫 MAC, 全称是 Mandatory Access Control, 翻译为强制访问控制。

    注意, MAC 和 DAC 不是互斥的, DAC 是最基本的安全模型,也是通常我们最常用到的访问控制机制是 Linux 必须具有的功能, 而 MAC 是构建在 DAC 之上的加强安全机制,属于可选模块。访问前, Linux系统通常都是先做 DAC 检查, 如果没有通过则操作直接失败; 如果通过 DAC 检查并且系统支持 MAC 模块,再做 MAC 权限检查。

    为区分两者,我们将支持 MAC 的 Linux 系统称作 SELinux, 表示它是针对 Linux 的安全加强系统。

    这里,我们将讲述 Linux 系统中的 DAC 安全模型。

    DAC 安全模型

    DAC 的核心内容是:在 Linux 中,进程理论上所拥有的权限与执行它的用户的权限相同。其中涉及的一切内容,都是围绕这个核心进行的。

    用户和组ID信息控制

    用户、组、口令信息

    通过 /etc/passwd 和 /etc/group 保存用户和组信息,通过 /etc/shadow 保存密码口令及其变动信息, 每行一条记录。

    用户和组分别用 UID 和 GID 表示,一个用户可以同时属于多个组,默认每个用户必属于一个与之 UID 同值同名的 GID 。

    对于 /etc/passwd , 每条记录字段分别为 用户名:口令(在 /etc/shadow 加密保存):UID:GID(默认UID):描述注释:主目录:登录shell(第一个运行的程序)

    对于 /etc/group , 每条记录字段分别为 组名:口令(一般不存在组口令):GID:组成员用户列表(逗号分割的用户UID列表)

    对于 /etc/shadow ,每条记录字段分别为: 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:

    举例

    以下是对用户和组信息的举例。 /etc/shadow 中的口令信息为加密存储,不举例。

    $cat /etc/passwd |head -n 5

    root:x:0:0:root:/root:/bin/bash

    daemon:x:1:1:daemon:/usr/sbin:/bin/sh

    bin:x:2:2:bin:/bin:/bin/sh

    sys:x:3:3:sys:/dev:/bin/sh

    sync:x:4:65534:sync:/bin:/bin/sync

    $cat /etc/group |head -n 5

    root:x:0:

    daemon:x:1:

    bin:x:2:

    sys:x:3:

    adm:x:4:miracle

    文件权限控制信息

    文件类型

    Linux 中的文件有如下类型:

    普通文件, 又包括文本文件和二进制文件, 可用 touch 创建;

    套接字文件, 用于网络通讯,一般由应用程序在执行中间接创建;

    管道文件是有名管道,而非无名管道, 可用 mkfifo 创建;

    字符文件和块文件均为设备文件, 可用 mknod 创建;

    链接文件是软链接文件,而非硬链接文件, 可用 ln 创建。

    访问权限控制组

    分为三组进行控制:

    user 包含对文件属主设定的权限

    group 包含对文件属组设定的权限

    others 包含对其他者设定的权限

    可设定的权限

    下面给出常见(但非全部)的权限值, 包括:

    r 表示具有读权限。

    w 表示具有写权限。

    x 一般针对可执行文件/目录,表示具有执行/搜索权限。

    s 一般针对可执行文件/目录,表示具有赋予文件属主权限的权限,只有 user 和 group 组可以设置该权限。

    t 一般针对目录,设置粘滞位后,有权限的用户只能写、删除自己的文件,否则可写、删除目录所有文件。旧系统还表示可执行文件运行后将text拷贝到交换区提升速度。

    举例

    通过 ls -l 可以查看到其文件类型及权限,通过 chmod 修改权限。

    举例来说,

    $ ls -l /usr/bin/qemu-i386

    -rwxr-xr-x 1 root root 2149080 8月 13 2014 /usr/bin/qemu-i386

    $ chmod 1775 test/

    $ ls -l |grep test

    drwxrwxr-t 2 miracle video 4096 7月 20 09:31 test

    $ chmod 2777 test2/

    $ ls -l |grep test2

    drwxrwsrwx 2 miracle video 4096 7月 20 09:32 test2

    $ chmod 4777 test3/

    $ ls -l |grep test3

    drwsrwxrwx 2 miracle video 4096 7月 20 09:33 test3

    输出中, 第1个字符表示文件类型,其中,普通文件(-)、目录文件 (d)、套接字文件(s),管道文件(p),字符文件(c),块文件(b),链接文件(l); 第2个字符开始的 -rwxr-xr-x 部分表示文件的权限位,共有9位。

    对于文件 /usr/bin/qemu-i386 , 这个权限控制的含义是:

    第2~4位的 rwx 表示该文件可被它的 owner (属主)以 r 或 w 或 x 的权限访问。

    第5~7位的 r-x 表示该文件可被与该文件同一属组的用户以 r 或 x 的权限访问

    第8~10位的 r-x 表示该文件可被其它未知用户以 r 或 x 的权限访问。

    对于 test/, test2/, test3/ 设定的权限:

    r,w,x 权限对每一权限控制组的权限用一位8进制来表示; 例如: 755 表示 rwxr-xr-x 。

    s,t 权限会替代 x 位置显示;设定 s,t 权限则需在对应的、用于控制 r,w,x 的8进制权限控制组前追加数字; s 权限用于属主属组控制, t 用于其它控制。

    设定属主 s 需追加 4, 设定属组 s 追加 2, 设定其它者 t 权限追加 1 ; 例如前面对 test/ 设定 t, 则用 1775, 表示 rwxrwxr-t 。

    进程权限控制信息

    进程权限

    对于进程,有如下属性与文件访问权限相关:

    effective user id : 进程访问文件权限相关的 UID (简写为 euid )。

    effective group id : 进程访问文件权限相关的 GID (简写为 egid )。

    real user id : 创建该进程的用户登录系统时的 UID (简写为 ruid )。

    real group id : 创建该进程的用户登录系统时的 GID (简写为 rgid )。

    saved set user id : 拷贝自 euid 。

    saved set group id : 拷贝自 egid 。

    举例

    我们可以使用 ps 和 top 选择查看具有 euid 和 ruid 的进程。或者通过 top 来查看进程的 euid 和 ruid

    通过 top 来查看的例子:

    首先输入 top 得到类似如下

    $top -d 10.10

    top - 15:50:39 up 9 days, 1:42, 9 users, load average: 0.13, 0.16, 0.21

    Tasks: 287 total, 2 running, 284 sleeping, 0 stopped, 1 zombie

    Cpu(s): 20.8%us, 4.6%sy, 0.0%ni, 72.5%id, 2.1%wa, 0.0%hi, 0.0%si, 0.0%st

    Mem: 7707276k total, 7574252k used, 133024k free, 154872k buffers

    Swap: 1998844k total, 223744k used, 1775100k free, 3330212k cached

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    31603 miracle 20 0 2368m 681m 52m S 6 9.1 206:07.74 firefox

    1507 root 20 0 451m 188m 97m S 2 2.5 193:49.86 Xorg

    ....

    这里通过 -d 选项延长 top 的刷新频率便于操作。此处可见,只有 USER 字段,表示相应进程的 effective user id.

    打开 read user id 的显示选项

    在 top 命令运行期间,输入 f, 可以看见类似如下行:

    c: RUSER = Real user name

    输入 c 即可打开 Real user name 的显示开关。

    * C: RUSER = Real user name

    最后 Return 回车回到 top 中,即可看到 real user id 的选项

    此时输入 o,可调整列次序

    最终我们可看到包含 effective user id 和 real user id 的输出如下:

    top - 15:57:58 up 9 days, 1:49, 9 users, load average: 0.23, 0.22, 0.23

    Tasks: 286 total, 1 running, 284 sleeping, 0 stopped, 1 zombie

    Cpu(s): 3.9%us, 1.4%sy, 0.0%ni, 94.6%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st

    Mem: 7707276k total, 7539776k used, 167500k free, 154996k buffers

    Swap: 1998844k total, 225132k used, 1773712k free, 3300036k cached

    PID USER RUSER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    31603 miracle miracle 20 0 2376m 688m 52m S 4 9.2 206:24.14 firefox

    1507 root root 20 0 451m 188m 97m S 3 2.5 194:06.27 Xorg

    ....

    其中, PID 是对应进程, USER 是对应的 effective user, RUSER 是对应的 real user 。

    进程访问文件的权限控制策略

    规则

    进程访问文件大致权限控制策略

    对于进程访问文件而言,最重要的是 euid, 所以其权限属性均以 euid 为 "中心"。

    进程的 euid 一般默认即为 其 ruid 值

    若可执行文件的可执行权限位为 s ,进程对其调用 exec 后,其 euid 被设置为该可执行文件的 user id

    进程的 saved set user id 拷贝自 euid.

    当进程的 euid 与文件的 user id 匹配时,进程才具有文件 user 权限位所设定的权限

    组权限 egid 的控制规则类似。

    通过 exec 执行文件修改权限属性

    通过 exec 调用可执行文件之时:

    进程 ruid 值始终不变;

    saved set-user ID 始终来自 euid ;

    euid 值取决于文件的 set-user-ID 位是否被设置。

    如下:

    IDset-user-ID bit offset-user-ID bit on

    real user IDunchangedunchangedeffective user IDunchangedset from userID of program filesaved set-user IDcopied from effective user IDcopied from effective user ID

    通过 setuid(uid) 系统调用修改权限属性

    通过 setuid(uid) 修改权限属性之时:

    superuser 可顺利修改 ruid, euid, saved set-user ID ;

    unprivileged user 只能在 uid 与 ruid 或 saved set-user ID 相等时可修改 euid, 其它无法修改。

    如下:

    IDsuperuserunprivileged user

    real user IDset to uidunchangedeffective user IDset to uidset to uidsaved set-user IDset to uidunchanged

    举例

    再举几个比较特别的例子:

    设置了 set-user-id

    $ ls -l /usr/bin/sudo

    -rwsr-xr-x 1 root root 71288 2月 28 2013 /usr/bin/sudo

    如前所述,这个输出的含义是,对于 /usr/bin/sudo 文件,

    第1~3位的 rws 表示该文件可被它的owner(属主)以 r 或 w 或 s 的权限访问

    第4~6位的 r-x 表示该文件可被与该文件同一属组的用户以 r 或 x 的权限访问。

    第7~9位的 r-x 表示该文件可被其它未知用户以 r 或 x 的权限访问。

    这样设置之后,对于owner,具有读、写、执行权限,这一点没有什么不同。但是对于不属于 root 组的普通用户进程来说,却大不相同。

    普通用户进程执行 sudo 命令时通过其 others 中的 x 获得执行权限,再通过 user 中的 s 使得普通用户进程临时具有了 sudo 可执行文件属主( root )的权限,即超级权限。

    这也是为什么通过 sudo 命令就可以让普通用户执行许多管理员权限的命令的原因。

    设置了 stick-bit

    $ ls -l / |grep tmp

    drwxrwxrwt 25 root root 12288 7月 20 09:09 tmp

    这样设置之后,对于 /tmp 目录,任何人都具有读、写、执行权限,这一点没有什么不同。但是对于 others 部分设置了粘滞位 t, 其功能却大不相同。

    若目录没设置粘滞位,任何对目录有写权限者都则可删除其中任何文件和子目录,即使他不是相应文件的所有者,也没有读或写许可; 设置粘滞位后,用户就只能写或删除属于他的文件和子目录。

    这也是为什么任何人都能向 /tmp 目录写文件、目录,却只能写和删除自己拥有的文件或目录的原因。

    举一个 man 程序的应用片断,描述 set-user-id 和 saved set-user-id 的使用

    man 程序可以用来显示在线帮助手册, man 程序可以被安装指定 set-user-ID 或者 set-group-ID 为一个指定的用户或者组。

    man 程序可以读取或者覆盖某些位置的文件,这一般由一个配置文件(通常是 /etc/man.config 或者 /etc/manpath.config )或者命令行选项来进行配置。

    man 程序可能会执行一些其它的命令来处理包含显示的 man 手册页的文件。

    为防止处理出错, man 会从两个特权之间进行切换:运行 man 命令的用户特权,以及 man 程序的拥有者的特权。

    需要抓住的主线:当只执行 man 之时,进程特权就是 man 用户的特权, 当通过 man 执行子进程(如通过 !bash 引出shell命令)时,用户切换为当前用户,执行完又切换回去。

    过程如下:

    假设 man 程序文件被用户 man 所拥有,并且已经被设置了它的 set-user-ID 位,当我们 exec 它的时候,我们有如下情况:

    real user ID = 我们的用户UID

    effective user ID = man用户UID

    saved set-user-ID = man用户UID

    man 程序会访问需要的配置文件和 man 手册页。这些文件由 man 用户所拥有,但是由于 effective user ID 是 man,文件的访问就被允许了。

    在 man 为我们运行任何命令的时候,它会调用 setuid(getuid())) (getuid() 返回的是 real user id).

    因为我们不是 superuser 进程,这个变化只能改变 effective user ID. 我们会有如下情况:

    real user ID = 我们的用户UID(不会被改变)

    effective user ID = 我们的用户UID

    saved set-user-ID = man 的用户UID(不会被改变)

    现在 man 进程运行的时候把我们得UID作为它的 effective user ID.这也就是说,我们只能访问我们拥有自己权限的文件。也就是说,它能够代表我们安全地执行任何 filter.

    当 filter 做完了的时候, man 会调用 setuid(euid).

    这里, euid 是 man 用户的UID.(这个ID是通过 man 调用 geteuid 来保存的)这个调用是可以的,因为 setuid 的参数和 saved set-user-ID 是相等的。(这也就是为什么我们需要 saved set-user-ID).这时候我们会有如下情况:

    real user ID = 我们的用户UID(不会被改变)

    effective user ID = man的UID

    saved set-user-ID = man 的用户UID(不会被改变)

    由于 effective user ID 是 man,现在 man 程序可以操作它自己的文件了。

    通过这样使用 saved set-user-ID,我们可以在进程开始和结束的时候通过程序文件的 set-user-ID 来使用额外的权限。然而,期间我们却是以我们自己的权限运行的。如果我们无法在最后切换回 saved set-user-ID,我们就可能会在我们运行的时候保留额外的权限。

    下面我们来看看如果 man 启动一个 shell 的时候会发生什么:

    这里的 shell 是 man 使用 fork 和 exec 来启动的。

    因为这时 real user ID 和 effective user ID 都是我们的普通用户UID(参见step3), 所以 shell 没有其它额外的权限.

    启动的 shell 无法访问 man 的 saved set-user-ID(man) ,因为 shell 的 saved set-user-ID 是由 exec 从 effective user ID 拷贝过来的。

    在执行 exec 的子进程( shell )中,所有的 user ID 都是我们的普通用户ID.

    实际上,我们描述 man 使用 setuid 函数的方法不是特别正确,因为程序可能会 set-user-ID 为 root .这时候, setuid 会把所有三种uid都变成你设置的id,但是我们只需要设置 effective user ID.

    展开全文
  • 18.Java的访问控制

    2021-04-24 16:50:52
    (一).privateprivate表示当前类访问权限。如果类里的一个成员(包括成员变量、方法、构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。这个访问控制符用于修饰成员变量最合适,使用它来...

    Java的访问控制符

    一.类的成员的可见性

    对于类的成员变量和成员方法,我们可以通过设定一定的访问可见性来限定应用范围。

    875e55c6d76cb711eed8abe334a6e231.png

    (一).private

    private表示当前类访问权限。如果类里的一个成员(包括成员变量、方法、构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。这个访问控制符用于修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。

    (二).default

    default表示包访问权限。如果一个类里的一个成员(包括成员变量、方法、构造器等)或者一个外部类不使用任何访问控制符修饰,就称它是包访问权限的,default访问控制的成员或外部类可以被相同包下的其他类访问。

    (三).protected

    protected表示子类访问权限。如果一个成员(包括成员变量、方法、构造器等)使用protected访问控制符进行修饰,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其他子类来重写这个方法。

    (四).public

    public 表示公共访问权限,如果个成员(包括成员变量、方法、构造器等)活着一个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否在同一个包中,是否具有继承关系。

    二.外部类的可见性

    对于外部类(即普通类)而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别:public和默认(default)。成员内部类可以使用private。

    public修饰类可以被所有类访问,包括声明变量、创建实例。

    不使用任何访问控制符修饰的既是default进行修饰的,只能被同一个包中的其他类使用。

    外部类不能使用private和protected修饰,因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此private和protected范围控制符对外部类没有意义。

    标签:Java,18,成员,控制符,private,访问,protected,修饰

    来源: https://blog.csdn.net/qq_45327458/article/details/113729791

    展开全文
  • mysql默认的root是不允许远程访问的,只能localhost本地之间的数据访问,如果要想使外部的任何一个ip访问数据权限,可执行以下语句:也可针对指定ip开放访问权限。CREATE USER 'root'@'%' IDENTIFIED BY PASSWORD '*...

    mysql默认的root是不允许远程访问的,只能localhost本地之间的数据访问,如果要想使外部的任何一个ip访问数据权限,可执行以下语句:

    也可针对指定ip开放访问权限。

    CREATE USER 'root'@'%' IDENTIFIED BY PASSWORD '*7B2F14D9BB629E334CD49A1028BD85750F7D3530';

    GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' IDENTIFIED BY PASSWORD '*7B2F14D9BB629E334CD49A1028BD85750F7D3530' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

    附:

    MySQL的Grant命令(MySQL 5.0 及以上版本)。

    MySQL 赋予用户权限命令的简单格式可概括为:

    grant 权限 on 数据库对象 to 用户

    一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。

    grant select on testdb.* to common_user@'%'

    grant insert on testdb.* to common_user@'%'

    grant update on testdb.* to common_user@'%'

    grant delete on testdb.* to common_user@'%'

    或者,用一条 MySQL 命令来替代:

    grant select, insert, update, delete on testdb.* to common_user@'%'

    二、grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。

    grant 创建、修改、删除 MySQL 数据表结构权限。

    grant create on testdb.* to developer@'192.168.0.%';

    grant alter on testdb.* to developer@'192.168.0.%';

    grant drop on testdb.* to developer@'192.168.0.%';

    grant 操作 MySQL 外键权限。

    grant references on testdb.* to developer@'192.168.0.%';

    grant 操作 MySQL 临时表权限。

    grant create temporary tables on testdb.* to developer@'192.168.0.%';

    grant 操作 MySQL 索引权限。

    grant index on testdb.* to developer@'192.168.0.%';

    grant 操作 MySQL 视图、查看视图源代码 权限。

    grant create view on testdb.* to developer@'192.168.0.%';

    grant show view on testdb.* to developer@'192.168.0.%';

    grant 操作 MySQL 存储过程、函数 权限。

    grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status

    grant alter routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure

    grant execute on testdb.* to developer@'192.168.0.%';

    三、grant 普通 DBA 管理某个 MySQL 数据库的权限。

    其中,关键字 “privileges” 可以省略。

    grant all privileges on testdb to dba@'localhost'

    四、grant 高级 DBA 管理 MySQL 中所有数据库的权限。

    grant all on *.* to dba@'localhost'

    五、MySQL grant 权限,分别可以作用在多个层次上。

    grant 作用在整个 MySQL 服务器上:

    grant select on *.* to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表。

    grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库

    grant 作用在单个数据库上:

    grant select on testdb.* to dba@localhost; -- dba 可以查询 testdb 中的表。

    grant 作用在单个数据表上:

    grant select, insert, update, delete on testdb.orders to dba@localhost;

    这里在给一个用户授权多张表时,可以多次执行以上语句。例如:

    grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';

    grant select on smp.mo_sms to mo_user@'%' identified by '123345';

    grant 作用在表中的列上:

    grant select(id, se, rank) on testdb.apache_log to dba@localhost;

    grant 作用在存储过程、函数上:

    grant execute on procedure testdb.pr_add to 'dba'@'localhost'

    grant execute on function testdb.fn_add to 'dba'@'localhost'

    六、查看 MySQL 用户权限

    查看当前用户(自己)权限:

    show grants;

    查看其他 MySQL 用户权限:

    show grants for dba@localhost;

    七、撤销已经赋予给 MySQL 用户权限的权限。

    revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

    grant all on *.* to dba@localhost;

    revoke all on *.* from dba@localhost;

    八、MySQL grant、revoke 用户权限注意事项

    grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

    如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“

    grant select on testdb.* to dba@localhost with grant option;

    这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。

    遇到 SELECT command denied to user '用户名'@'主机名' for table '表名' 这种错误,解决方法是需要把吧后面的表名授权,即是要你授权核心数据库也要。

    我遇到的是SELECT command denied to user 'my'@'%' for table 'proc',是调用存储过程的时候出现,原以为只要把指定的数据库授权就行了,什么存储过程、函数等都不用再管了,谁知道也要把数据库mysql的proc表授权。

    mysql授权表共有5个表:user、db、host、tables_priv和columns_priv。

    授权表的内容有如下用途:

    user Table:

    user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

    db Table:

    db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

    host Table:

    host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

    tables_priv Table:

    tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

    columns_priv Table:

    columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

    展开全文
  • Java四种访问权限

    千次阅读 2021-02-12 17:01:52
    一、访问权限简介访问权限控制: 指的是本类本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public...

    一、访问权限简介

    访问权限控制: 指的是本类及本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:

    public > protected > default(包访问权限) > private

    public:Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。

    protected:介于public 和 private 之间的一种访问修饰符,一般称之为“保护访问权限”。被其修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。对外包的非子类是不可以访问。

    default:即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问,外包的所有类都不能访问。

    private:Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。

    注意:

    1、所谓的访问,可以分为两种不同方式:通过对象实例访问;直接访问。

    比如说,某父类protected权限的成员,子类是可以直接访问的,换一种说法是子类其实继承了父类的除了private成员外的所有成员,包括protected成员,所以与其说是子类访问了父类的protected成员,不如说子类访问了自己的从父类继承来的protected成员。另一方面,如果该子类与父类不在同一个包里,那么通过父类的对象实例是不能访问父类的protected成员的。

    2、要区分开 protected 权限、包访问权限,正确使用它们;

    当某个成员能被所有的子类继承,但不能被外包的非子类访问,就是用protected;

    当某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员,就用包访问权限;

    3、使用访问权限控制的原因:

    1)使用户不要碰触那些他们不该碰触的部分;

    2)类库设计者可以更改类的内部工作的方式,而不会担心这样会对用户产生重大影响;

    二、下面用表格来展示四种修饰符的访问权限范围。列所指定的类是否有权限允许访问行的权限控制下的内容:

    AAffA0nNPuCLAAAAAElFTkSuQmCC

    三、访问权限控制的使用场景

    访问权限使用的场景可以总结为下面的五种场景,分别对访问权限的使用有不同的限制:

    1、外部类的访问控制

    外部类(外部接口) 是相对于内部类(也称为嵌套类)、内部接口而言的。外部类的访问控制只能是这两种:public、default 。

    //public 访问权限的外部类,所有类都可以使用这个类

    public class OuterClass {

    }

    //default 访问权限的外部接口,所有类、接口均可以使用此接口

    interface OuterInterface{

    }

    2、类里面的成员的访问控制

    类里面的成员分为三类:成员变量、成员方法、成员内部类(内部接口)

    类里面的成员的访问控制可以是四种,也就是可以使用所有的访问控制权限

    public class OuterClass {

    public int aa; //可以被所有的类访问

    protected boolean bb; //可以被所有子类以及本包的类使用

    void cc() { //default 访问权限,能在本包范围内使用

    System.out.println("包访问权限");

    }

    //private权限的内部类,即这是私有的内部类,只能在本类使用

    private class InnerClass{

    }

    }

    注意:

    这里的类里面的成员是指类的全局成员,并没有包括局部的成员(局部变量、局部内部类,没有局部内部接口)。或者说,局部成员是没有访问权限控制的,因为局部成员只在其所在的作用域内起作用,不可能被其他类访问到。

    public void count(){

    //局部成员变量

    public int amount;//编译无法通过,不能用public修饰

    int money;//编译通过

    //局部嵌套接口

    class customer{//编译通过

    }

    }

    上面的两种场景几乎可以适应所有的情况,但有一些情况比较特殊,还做了有些额外访问权限的要求。

    3、抽象方法的访问权限

    普通方法是可以使用四种访问权限的,但抽象方法是有一个限制:不能用private 来修饰,也即抽象方法不能是私有的。否则,子类就无法继承实现抽象方法。

    4、接口成员的访问权限

    接口由于其自身特殊性,所有成员的访问权限都规定得死死的。下面是接口成员的访问权限:

    变量: public static final

    抽象方法: public abstract

    静态方法: public static,JDK1.8后才支持

    内部类、内部接口 : public static

    也因为所有的一切都默认强制规定好了,所以我们在用的时候,并不一定需要完整写出所有的修饰符,编译器会帮我们完成的。也就是,可以少写修饰符,但不能写错修饰符。

    public interface Interface_Test {

    public int aa = 6; //少写了 static final

    int bb = 5; //

    //嵌套接口,可以不写public static

    interface cc{

    }

    }

    5、构造器的访问权限

    构造器的访问权限可以是以上四种权限中的任意一种:

    A 采用 private:一般是不允许直接构造这个类的对象,再结合工厂方法(static方法),实现单例模式。注意:所有子类都不能继承它。

    B 采用包访问控制:比较少用,这个类的对象只能在本包中使用,但是如果这个类有static 成员,那么这个类还是可以在外包使用;(也许可以用于该类的外包单例模式)。

    注意:外包的类不能继承这个类。

    C 采用 protected:就是为了能让所有子类继承这个类,但是外包的非子类不能访问这个类。

    D 采用 public:对于内外包的所有类都是可访问的;

    注意: 构造方法有点特殊。因为子类的构造器初始化时,都要调用父类的构造器,所以一旦父类构造器不能被访问,那么子类的构造器调用失败,意味着子类继承父类失败!

    展开全文
  • 原标题:Linux自主访问控制机制模块总体描述1总体描述1.1概述随着计算机技术,特别是网络技术的发展,...访问控制用于限制用户对系统关键资源的访问,从而有效的防止非法用户进入系统合法用户对系统资源的非法访问...
  • mysql权限

    2021-01-20 19:53:52
    要操作授权表的内容,请使用帐户管理语句(例如CREATE USER,) 间接修改它们GRANT,并REVOKE设置帐户并控制每个帐户可用的权限。请参见第13.7.1节“帐户管理语句”。此处的讨论描述了授权表的基础结构以及服务...
  • 一、访问权限简介访问权限控制: 指的是本类本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public...
  • 类中成员的访问权限_Java语言程

    千次阅读 2021-03-17 10:29:14
    类中成员的访问权限_Java语言程4.7.2 类中成员的访问权限Java将类中成员(成员变量和成员方法)的访问权限(可见性)划分为4种情况,按照访问权限范围大小从小到大列出如下。·私有(private)成员:仅在本类内中的...
  • 原文 http://blog.chinaunix.net/uid-73604-id-3045977.htmlgrant 权限 on 数据库对象 to 用户 passwordmysql> grant all on *.* to root@"%" identified by 'abc123';Query OK, 0 rows affected (0.01 sec)mysql...
  • 设置存储桶和对象访问权限本部分介绍如何使用 Amazon Simple Storage Service (Amazon S3) 控制台授予存储桶和对象的访问权限。本部分还介绍如何使用 AmazonS3 阻止公有访问来阻止使用允许对 S3 存储桶中的数据进行...
  • Linux文件的访问权限* 在Android中,每一个应用是一个独立的用户* drwxrwxrwx* 第1位:d表示文件夹,-表示文件* 第2-4位:rwx,表示这个文件的拥有者(创建这个文件的应用)用户对该文件的权限* r:读* w:写* x:执行...
  • 摘要:计算机网络的全球化趋势将会带来引来愈来愈严重的安全性问题,...关键词:计算机网络 访问控制 网络安全1引言近些年以来,伴随着全球范围之内计算网络化趋势的迅猛提升,计算机网络技术不断扩充进入到社会各行...
  • 列出已分配特定角色的所有用户-- Change 'DBA' to the required roleselect * from dba_role_privs where granted_role = 'DBA'列出给予用户的所有角色-- Change 'PHIL@ to the required userselect * from dba_role...
  • JavaEE权限管理系统的搭建-------使用拦截器实现菜单URL的...紧接着根据当前登录用户查询所有权限列表,然后进行验证,如果包含对应注解中的权限代码,就放行,否则提示或者跳转到404. /** * 进入管理用户列表页面
  • 主要介绍了访问控制技术的相关概念,分别对四种重要的计算网络访问控制技术进行介绍与分析:自主式访问控制技术、强制式访问控制技术、角色式访问控制技术与任务式访问控制技术。关键词:计算机网络 访问控制 网络...
  • 一、访问权限简介访问权限控制: 指的是本类本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public...
  • Linux 网络访问控制

    2021-05-27 07:14:03
    网络访问控制:netfilter模块,可以对数据进行允许、丢弃、修改操作数据包分类:源IP地址、目标IP地址、使用接口、使用协议、端口号、连接状态过滤点:input、forward、output、prerouting、postrouting功能点:...
  • 2.7.1 公开还是保密--访问控制...在这里先列出这几个关键字的内容,然后分别给大家介绍一下。它们分别是:default、public、protected、private。从字面意义上看,意思是默认的,公共的,受保护的,私有的。看到这些...
  • 展开全部在解32313133353236313431303231363533e59b9ee7ad9431333366306436释访问权限控制之前,先看一个场景。在学生信息管理系统中,有两个类,分别是学生类和课程类,课程类提供了课程表和课程安排两个方法,学生...
  • 为了保证Windows系统的安全稳定,很多用户都是使用NTFS文件系统,因此共享文件夹的访问权限不但受到“共享权限”限制,还受到NTFS文件系统的ACL(访问控制列表)包含的访问权限的制约。下面笔者就以“CCE”共享文件夹...
  • java四种访问权限

    2021-02-13 00:36:10
    一、访问权限简介访问权限控制:指的是本类本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public ...
  • 大家有没有遇到过Win10笔记本电脑连接wifi信号后显示无Internet访问权限,不能够上网,是什么原因导致的?又该如何修复?带着刺疑问,快来看看具体设置方法。无Internet访问权限,主要有3个方面的原因引起的。1、...
  • 一、访问权限简介访问权限控制: 指的是本类本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public...
  • 使用您刚刚通过 AWS CLI 检索的 AROAEXAMPLEID,即可创建条件逻辑,让存储桶策略将存储桶访问权限范围仅限于访问存储桶时使用此角色的用户。使用条件逻辑而非 NotPrincipal 元素可支持使用通配符字符串,从而允许...
  • 自主访问权限为用户提供了很大的灵活性,从而导致系统安全的薄弱。 强制访问控制 事先规定了某一个客体对哪些客体允许进行什么样的访问 安全策略:(根据 安全需求 指定相应的 安全策略) 为了描述系统的安全需求而...
  • Centos给文件设置了777权限仍不能访问:开启了SELinux导致1.查看SELinux状态:/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态SELinux status: enabled##也可以用这个命令检查getenforce2....
  • 09 HDFS访问权限控制

    2020-12-18 10:06:34
    一、HDFS访问权限控制 HDFS权限模型和Linux系统类似。每个文件和目录有一个所有者(owner)和一个组(group)。文件或目录对其所有者、同组的其他用户以及所有其他用户(other)分别有着不同的权限。对文件而言...
  • 请与这台服务器的管理员联系以查明您是否有访问权限”的报错,这可能是计算机的安全设置被改动过了,导致目标计算机无法被访问。可以采取以下步骤解决:1. 取消简单文件共享。打开“我的电脑”,在菜单上选择“工具...
  • 一、Ranger概述1.Ranger简介Apache Ranger提供一个...通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。本文章介绍Ranger与Hive集成过程,与使用方法2.Ranger包含以下组件Ranger Admin 用户...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 251,138
精华内容 100,455
关键字:

列出访问控制权限及访问范围