≪セキュリティ|Security|ldap≫-ロール・ベースのアクセス制御

3675 ワード

完全なコースを学習するには、インターネットJavaフルスタックエンジニアに移行してください.
ロールベースのアクセス制御(Role-based access control,RBAC)は、情報セキュリティ分野において、強制アクセス制御や自由選択アクセス制御とは異なり、権限をロールに付与する、より新しい広く使用されているアクセス制御メカニズムである.アクセス制御を強制し、自由に選択できるアクセス制御よりも中性的で柔軟性の高いアクセス制御技術です.
RBACとは
RBACモデルの基本思想は,アクセス許可権を一定の役割に割り当て,ユーザが異なる役割を演じることで役割が持つアクセス許可権を得ることである.
アクセス制御は、誰(Who)が何(What/Which)に対してどのように(How)操作を行うかを判断することを簡単に表すことができる.
RBACでは,ユーザの権限はユーザ自身で管理されるものではなく,ユーザの権限はユーザが置かれている役割によって決まる.権限管理では、ロールという橋渡しでユーザーと権限を関連付けます.ユーザーとロール、ロールと権限は多対多の関係です.
RBACアクセス制御に関する概念は以下の通りである.
  • ユーザー(User):一意の識別子を持つユーザーは、権限から分離され、所属するロールによってのみ権限を関連付けることができ、1人のユーザーは複数のロールを持つことができる.
  • ロール(Role):一定数の権限の集合で、ロールは継承でき、1つのロールは複数の権限に対応する.
  • 権限(Resource):アプリケーションシステムの機能に対応するリソースと見なすこともできます.

  • 対応するデータテーブル構造の設計
    ここではThinkPHPのテーブル構造を使用しており,フィールド設定は機能の設計要件を満たしている.
    ユーザーテーブル
    最初のテーブルはユーザーテーブルで、よく使われるフィールドです.分かりやすいです.
    CREATE TABLE `think_user` (
        `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
        `account` varchar(64) NOT NULL,
        `nickname` varchar(50) NOT NULL,
        `password` char(32) NOT NULL,
        `email` varchar(50) NOT NULL,
        `remark` varchar(255) NOT NULL,
        `create_time` int(11) UNSIGNED NOT NULL,
        `status` tinyint(1) DEFAULT '0',
        PRIMARY KEY (`id`),
        UNIQUE `account` (`account`)
    ) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARSET = utf8
    

    ロールテーブル
    2つ目はロールテーブル、またはグループテーブルと理解できます
    CREATE TABLE IF NOT EXISTS `think_role` (
        `id` smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
        `name` varchar(20) NOT NULL,
        `pid` smallint(6) DEFAULT NULL,
        `status` tinyint(1) UNSIGNED DEFAULT NULL,
        `remark` varchar(255) DEFAULT NULL,
        PRIMARY KEY (`id`),
        KEY `pid` (`pid`),
        KEY `status` (`status`)
    ) ENGINE = MyISAM CHARSET = utf8;
    

    ロール-ユーザー-リレーショナル・マッピング・テーブル
    3つ目は、ロール-ユーザー-リレーションシップマッピングテーブルです.このテーブルのデータは、複数対の複数のリレーションシップ、すなわち、複数のロールが1つのユーザーに対応し、複数のユーザーが1つのロールに対応することができます.私の実際の使用では、1人のユーザーが複数のロールに対応する場合には触れず、操作を簡素化するためです.
    CREATE TABLE IF NOT EXISTS `think_role_user` (
        `role_id` mediumint(9) UNSIGNED DEFAULT NULL,
        `user_id` char(32) DEFAULT NULL,
        KEY `group_id` (`role_id`),
        KEY `user_id` (`user_id`)
    ) ENGINE = MyISAM CHARSET = utf8;
    

    リソーステーブル
    4つ目はノードテーブル、すなわちリソーステーブルです.注意すべき2つのフィールド:pidはノードのレベルを関連付けるために使用され、levelはノードがアプリケーションなのか、モジュールと操作なのかを説明するために使用されます.
    CREATE TABLE IF NOT EXISTS `think_node` (
        `id` smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
        `name` varchar(20) NOT NULL,
        `title` varchar(50) DEFAULT NULL,
        `status` tinyint(1) DEFAULT '0',
        `remark` varchar(255) DEFAULT NULL,
        `sort` smallint(6) UNSIGNED DEFAULT NULL,
        `pid` smallint(6) UNSIGNED NOT NULL,
        `level` tinyint(1) UNSIGNED NOT NULL,
        PRIMARY KEY (`id`),
        KEY `level` (`level`),
        KEY `pid` (`pid`),
        KEY `status` (`status`),
        KEY `name` (`name`)
    ) ENGINE = MyISAM CHARSET = utf8;
    

    アクセス権テーブル
    最後に、最も重要なテーブル権限アクセステーブルでもあります.このテーブルのデータは、各ロールに対応する権限です.このテーブルの構造を理解すれば,RBAC全体の鍵も分かる.
    CREATE TABLE IF NOT EXISTS `think_access` (
    `role_id` smallint(6) UNSIGNED NOT NULL,
    `node_id` smallint(6) UNSIGNED NOT NULL,
    `level` tinyint(1) NOT NULL,
    `module` varchar(50) DEFAULT NULL,
    KEY `groupId` (`role_id`),
    KEY `nodeId` (`node_id`)
    ) ENGINE = MyISAM CHARSET = utf8;
    

    以上の5枚のテーブルでRBACベースの権限制御を完了します.もちろん、上記は権限管理全体の基礎データ、すなわち構成が必要なデータです.次に、ユーザーがログインしたときに、対応する権限を取得します.
    ユーザーの権限リストを取得する方法
  • は、ユーザが属するロールIDを照会する.
  • ロールIDに基づいてACCESSテーブルからそのロールがアクセス可能なノードリストを取得する.
  • ノードリストに関する情報をNODEから問い合わせる.
  • 生成ノードリスト情報を処理し、生成アクセス決定リストをSESSIONに保存する.