精华内容
下载资源
问答
  • 介绍 (Introduction) Elastic Kubernetes Service (EKS) is the fully managed Kubernetes service from ... It is deeply integrated with many AWS services, such as AWS Identity and Access Management (IAM) (...

    iam身份验证以及访问控制

    介绍 (Introduction)

    Elastic Kubernetes Service (EKS) is the fully managed Kubernetes service from AWS. It is deeply integrated with many AWS services, such as AWS Identity and Access Management (IAM) (for authentication to the cluster), Amazon CloudWatch (for logging), Auto Scaling Groups (for scaling worker nodes), and Amazon Virtual Private Cloud (VPC) (for networking). Many companies trust Amazon EKS to run their containerized workloads.

    Elastic Kubernetes服务(EKS)是AWS的完全托管的Kubernetes服务。 它与许多AWS服务深度集成,例如AWS Identity and Access Management(IAM)(用于对集群进行身份验证),Amazon CloudWatch(用于日志记录),Auto Scaling Groups(用于扩展工作节点)和Amazon Virtual Private Cloud( VPC)(用于联网)。 许多公司信任Amazon EKS来运行其容器化工作负载。

    EKS uses IAM to provide authentication to your Kubernetes cluster (via the aws eks get-token command, or the AWS IAM Authenticator for Kubernetes). For authorization it relies on native Kubernetes Role Based Access Control (RBAC). IAM is used for authentication to your EKS Cluster. And you can manage the permissions for interacting with your cluster’s Kubernetes API through the native Kubernetes RBAC system.

    EKS使用IAM为您的Kubernetes集群提供身份验证(通过aws eks get-token eks aws eks get-token命令或适用于KubernetesAWS IAM Authenticator )。 对于授权,它依赖于本地Kubernetes基于角色的访问控制(RBAC) 。 IAM用于对EKS群集进行身份验证。 而且,您可以通过本地Kubernetes RBAC系统管理与群集的Kubernetes API交互的权限。

    如何创建IAM用户 (How to create an IAM User)

    Go to your AWS Console where you will find the IAM service listed under the “Security, Identity & Compliance” group. Inside the IAM dashboard click on the Users tab and click the “Add User” button.

    转到您的AWS控制台 ,您将在其中找到“安全性,身份和合规性”组下列出的IAM服务 。 在IAM仪表板内,单击“用户”选项卡,然后单击“添加用户”按钮。

    Create a new user and allow the user programmatic access by clicking on the "Programmatic access" checkbox. You do not need any particular permission for your user to access EKS. You can go ahead without selecting any permission.

    创建一个新用户,并通过单击“程序访问”复选框来允许该用户以程序访问 。 您不需要用户的任何特殊权限即可访问EKS。 您无需选择任何权限即可继续操作。

    After the user is created, you will have access to the user's Access Key ID and Secret Access Key. You will be required to use these keys in the next step.

    创建用户后,您将有权访问用户的访问密钥ID秘密访问密钥 。 您将需要在下一步中使用这些键。

    配置AWS CLI (Configure the AWS CLI)

    Configuring your AWS CLI with a new user is as simple as running the aws configure command and providing the AWS Access Key ID and the AWS Secret Access Key. The Default region name and Default Output format are optional, though.

    使用新用户配置AWS CLI就像运行aws configure命令并提供AWS Access Key IDAWS Secret Access Key 。 但是, Default region nameDefault Output format是可选的。

    $ aws configure --profile eks-user
    AWS Access Key ID [None]: AKIAI44QH8DHBEXAMPLE
    AWS Secret Access Key [None]: je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
    Default region name [None]: us-east-1
    Default output format [None]: text

    Once configured you can test to see if the user is properly configured using the aws sts get-caller-identity command:

    配置完成后,您可以使用aws sts get-caller-identity命令测试是否正确配置了用户:

    $ aws sts get-caller-identity --profile eks-user

    If the user is properly configured with the aws cli utility you should see a response like the one shown below:

    如果使用aws cli实用程序正确配置了用户,您应该会看到如下所示的响应:

    {
        "UserId": "AIDAX7JPBEM4A6FTJRTMB",
        "Account": "123456789012",
        "Arn": "arn:aws:iam::123456789012:user/eks-user"
    }

    为用户创建角色和RoleBinding (Creating a Role and RoleBinding for the user)

    With your IAM user properly configured, you can go ahead and create a role for the user. This snippet of code creates a role named eks-user-role with a modest list permission to the pods resource in your cluster.

    正确配置IAM用户后,您可以继续为该用户创建角色。 此代码段创建一个名为eks-user-role ,对集群中的pods资源具有适度的list权限。

    kind: Role
    metadata:
      name: eks-user-role
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["list"]

    Save the above snippet of code in a file and then apply the Role to your Kubernetes cluster:

    将上述代码片段保存在文件中,然后apply Role应用于您的Kubernetes集群:

    $ kubectl apply -f role.yaml

    With the role configured you need to create a corresponding RoleBinding:

    配置了角色后,您需要创建相应的RoleBinding:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: eks-user-role-binding
    subjects:
    - kind: User
      name: eks-user
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: eks-user-role
      apiGroup: rbac.authorization.k8s.io

    Save the above snippet of code in a file and then apply the Role Binding to your Kubernetes cluster:

    将上述代码片段保存在文件中,然后apply角色绑定应用于您的Kubernetes集群:

    $ kubectl apply -f role-binding.yaml

    将用户添加到aws-auth配置图 (Adding the user to the aws-auth configmap)

    If you want to grant additional AWS users or roles the ability to interact with your EKS cluster, you must add the users/roles to the aws-auth ConfigMap within Kubernetes in the kube-system namespace.

    如果要授予其他AWS用户或角色与EKS集群进行交互的能力,则必须将用户/角色添加到kube-system命名空间中Kubernetes中的aws-auth ConfigMap中。

    You can do this by either editing it using the kubectl edit command:

    您可以使用kubectl edit命令kubectl edit

    $ kubectl edit configmap aws-auth -n kube-system

    Or by importing the aws-auth ConfigMap and applying the changes:

    或通过导入aws-auth ConfigMap并应用更改:

    $ kubectl get configmap aws-auth -n kube-system -o yaml > aws-auth.yaml

    Add the user under the mapUsers as an item in the aws-auth ConfigMap:

    将用户添加到mapUsers下,作为aws-auth ConfigMap中的一项:

    data:
      mapUsers: |
        - userarn: arn:aws:iam::123456789012:user/eks-user
          username: eks-user
          groups:
          - eks-role

    If the user is properly configured you should be able to list pods in the Cluster:

    如果正确配置了用户,则您应该能够在集群中列出Pod:

    $ kubectl get pods --as eks-user

    The --as flag impersonates the request to Kubernetes as the given user. You can use this flag to test permissions for any given user.

    --as标志以给定用户身份向Kubernetes发出请求。 您可以使用此标志来测试任何给定用户的权限。

    配置用户权限 (Configuring permissions for the user)

    The role which you defined previously only had permission to list pods. The eks-user cannot access any other Kubernetes resources like Deployments, ConfigMaps, Events, Secrets, logs or even shell into a given pod.

    您先前定义的角色仅具有列出窗格的权限。 eks eks-user无法访问任何其他Kubernetes资源,如Deployments,ConfigMap,Events,Secrets,日志甚至是shell到给定的pod中。

    In a real-world scenario, you will need to provide permissions to a user to access the required resources. The below snippet of code provides access to resources such as events, pods, deployments, configmaps and secrets.

    在实际情况下,您将需要向用户提供访问所需资源的权限。 下面的代码段提供对资源的访问,例如eventspodsdeploymentsconfigmapssecrets

    rules:
    - apiGroups: [""]
      resources: ["events"]
      verbs: ["get", "list", "watch"]
    - apiGroups: [""]
      resources: ["pods", "pods/log", "pods/exec"]
      verbs: ["list", "get", "create", "update", "delete"]
    - apiGroups: ["extensions", "apps"]
      resources: ["deployments"]
      verbs: ["list", "get", "create", "update", "delete"]
    - apiGroups: [""]
      resources: ["configmaps"]
      verbs: ["list", "get", "create", "update", "delete"]
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["list", "get", "create", "update", "delete"]

    Add the above permissions to the role.yaml file and apply the changes, using kubectl apply -f.

    使用kubectl apply -f将以上权限添加到role.yaml文件并应用更改。

    测试,测试和测试! (Test, test and test!)

    Now go ahead and test to see if the permissions have been properly applied to the eks-user. You can test the same using the above mentioned --as USERNAME flag or set the eks-user as the default profile for the aws cli.

    现在继续进行测试,以查看权限是否已正确地应用于eks-user 。 您可以使用上面提到的--as USERNAME标志进行测试,或者将--as USERNAME eks-user设置为aws cli的默认配置文件。

    $ export AWS_PROFILE=eks-user

    Once configured you can test to see if the user is properly configured using the aws sts get-caller-identity command:

    配置完成后,您可以使用aws sts get-caller-identity命令测试用户是否配置正确:

    $ aws sts get-caller-identity

    You should see a response like the following, indicating the user is properly configured with your aws cli utility:

    您应该看到类似以下的响应,表明已使用aws cli实用程序正确配置了用户:

    {
        "UserId": "AIDAX7JPBEM4A6FTJRTMB",
        "Account": "123456789012",
        "Arn": "arn:aws:iam::123456789012:user/eks-user"
    }

    Test the permissions of the user with the below-mentioned commands.

    使用以下命令测试用户的权限。

    $ kubectl get pods
    $ kubectl get secrets
    $ kubectl get configmaps
    $ kubectl get deployments
    $ kubectl logs <pod-name>
    $ kubectl exec -it <pod-name> sh
    $ kubectl create configmap my-cm --from-literal=db_username=<USERNAME> --from-literal=db_host=<HOSTNAME>
    $ kubectl create secret generic my-secret --from-literal=db_password=<SOME_STRONG_PASSWORD>

    Simply put, the eks-user user should be able to perform all the actions specified in the verbs array for pods, secrets, configmaps, deployments, and events. You can read more about it here Kubernetes Authorization Overview.

    简而言之, eks-user用户应该能够执行verbs数组中针对podssecretsconfigmapsdeploymentsevents所指定的所有动作。 您可以在此处阅读有关Kubernetes授权概述的更多信息。

    是否可以 (Can-I or Not)

    You can use auth can-i to check if you have permission to a resource. To see if you have the permission to get pods simply run:

    您可以使用auth can-i来检查您是否有权使用资源。 要查看您是否有权获得吊舱,只需运行:

    $ kubectl auth can-i get pods

    The answer will be a simple yes or no. Amazing, isn’t it?

    答案将是简单的yesno 。 太神奇了,不是吗?

    Wanna check if you have cluster-admin permissions? Fire this:

    想检查您是否具有cluster-admin权限? 触发此:

    $ kubectl auth can-i "*" "*"

    结语 (Wrap up)

    EKS provides the Kubernetes control plane with the backend persistence layer. The Kubernetes API server and the master nodes are provisioned and scaled across various availability zones, resulting in high availability and eliminating a single point of failure. An AWS-managed Kubernetes cluster can withstand the loss of an availability zone.

    EKS为​​Kubernetes控制平面提供了后端持久层。 Kubernetes API服务器和主节点在各种可用性区域中进行配置和扩展,从而实现了高可用性并消除了单点故障。 由AWS管理的Kubernetes集群可以承受可用性区域的丢失。

    Access and authorization controls are critical for any security system. Kubernetes provides us with an awesome robust RBAC permission mechanism.

    访问和授权控制对于任何安全系统都是至关重要的。 Kubernetes为我们提供了强大的RBAC许可机制。

    Originally published at faizanbashir.me

    最初发表在 faizanbashir.me

    翻译自: https://www.freecodecamp.org/news/adding-limited-access-iam-user-to-eks-cluster/

    iam身份验证以及访问控制

    展开全文
  • sso学习之IAM环境搭建

    千次阅读 2018-06-25 09:46:25
    1. IAM简介参考百科:IAM(Identity and Access Management 的缩写),即“身份识别与访问管理”,具有单点登录、强大的认证管理、基于策略的集中式授权和审计、动态授权、企业可管理性等功能。2. 环境准备2.0 ...

    1.     IAM简介

    参考百科:

    IAMIdentity and Access Management 的缩写),即身份识别与访问管理,具有单点登录、强大的认证管理、基于策略的集中式授权和审计、动态授权、企业可管理性等功能。

    2.     环境准备

    2.0 首先创建新目录mkdir –p /HIAM/software,把相关安装包都拷贝过来,准备安装

    2.1 配置hosts:先ifconfig查看下自己本机ip,然后写入hosts

    这样主要应该是为了访问本机不用使用ip或者localhost,直接使用网址访问。

    2.2 配置本地yum源

      主要目的是为了应对网络不佳的状况。

     1.  待补上

    2.3 安装jdk

    Jdk:

     

            -i:显示组件信息。

            -v: view,visual显示安装过程。

            -h:hash安装时列出标记。

    查看安装结果:

    使用rpm –ql jdk1.8查询到安装到的目录:

     /usr/java/jdk1.8.0_171-amd64/

    设置环境变量:

    1). vi /etc/profile,shift+g跳到最后一行

    2). 在文件最后添加

    JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

    JRE_HOME=/usr/java/jdk1.8.0_171-amd64/jre

    PATH=$JAVA_HOLME/bin:$JRE_HOME/bin:$PATH

    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

    export JAVA_HOME JRE_HOME PATHCLASSPATH

    ## PATH的配置根据利己原则,把原来的PATH写在后面,不然很有可能你安装完之后使用的java命令还是系统自带的openjdk里的,一般这种东西某些人又不想删。

    3). source /etc/profile ##也可以放在在~/.bashrc以自动执行

    3. 安装配置Tomcat

     Tomcat版本:9.0.8,进入相应目录执行

    3.1 Tomcat

    1 解压

    [root@qingxin software]# tar -zxvf./apache-tomcat-9.0.8.tar.gz

    2 配置

     第一个tomcat使用默认配置,不修改。但按步骤还是设置下防火墙。配置过程遇到一点问题,记录下:

    [root@qingxin conf]# service iptables save

    The service command supports only basic LSB actions (start, stop,restart, try-restart, reload, force-reload, status). For other actions, pleasetry to use systemctl.

    [root@qingxinconf]# systemctl iptables save

    Unknown operation 'iptables'.

    [root@qingxin ~]# yum install iptables-services

    [root@qingxin ~]# systemctl enable iptables

    [root@qingxin ~]# systemctl start iptables

    [root@qingxin ~]# service iptables save

     iptables: Savingfirewall rules to /etc/sysconfig/iptables:[ 确定  ]

    [root@qingxin ~]# service iptables restart

    至此,正常解决。参考:

    http://blog.163.com/xavier_666/blog/static/25884000720163299503423/

    3 启动tomcat

    [root@qingxin bin]# ./startup.sh

    4 访问

    3.2 Tomcat(cas)

     简单说就是,复制一份。改改端口号避免冲突,启动两个容器。步骤:

    1.     [root@qingxin software]# cp -rapache-tomcat-9.0.8 apache-tomcat-9.0.8-cas

    2.     修改server.xml

    1)  <Server port="18005" shutdown="SHUTDOWN">

    2)  <Connector port="18080" protocol="HTTP/1.1"

                   connectionTimeout="20000"

                   redirectPort="18443" />

    3)  <Connector port="18009" protocol="AJP/1.3"redirectPort="18443" />

    3. 针对修改的端口修改防火墙

    [root@qingxin conf]# /sbin/iptables -I INPUT -p tcp --dport18080 -j ACCEPT

     [root@qingxin ~]#service iptables save

    iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]

    [root@qingxin~]# service iptables restart

        Redirecting to/bin/systemctl restart  iptables.service

    4.  启动

    [root@qingxin bin]# ./startup.sh

    5.  访问

    4 redis安装

    1.     安装gcc

    [root@qingxin software]# yum install -y gcc g++ gcc-c++make

    2.     解压redis

    [root@qingxin software]# tar -xzvf redis-4.0.9.tar.gz

    3.     安装redis

    1)     进入redis目录

       [root@qingxinsoftware]# cd redis-4.0.9/

    2)     编译

    [root@qingxin redis-4.0.9]# make

    3)     安装

    [root@qingxin redis-4.0.9]# make install

    4)     启动

    [root@qingxin redis-4.0.9]# ./src/redis-server redis.conf&

    5)     查看进程

    [root@qingxin redis-4.0.9]# ps -ef|grep redis

    root     13231  5775  010:13 pts/0    00:00:00./src/redis-server 127.0.0.1:6379

    root     13239  5775  010:14 pts/0    00:00:00 grep --color=autoredis

    6)     开放redis默认的6379端口

    [root@qingxin redis-4.0.9]# /sbin/iptables -I INPUT -p tcp--dport 6379 -j ACCEPT

    [root@qingxin redis-4.0.9]# service iptables save

    iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]

    [root@qingxin redis-4.0.9]# serviceiptables restart

              Redirectingto /bin/systemctl restart iptables.service

         

    5. Openldap

     5.1 关闭selinux

      临时关闭用setenforce 0,永久关闭需要编辑/etc/selinux/config, 将SELINUX=enforcing改为SELINUX=disabled,保存后退出,并重启。如果不希望重启,还希望达到这个效果,可以修改自定义启动脚本:echo“ /usr/sbin/setenfore 0” >> /etc/rc.local (/etc/rc.local文件链接到/etc/rc.d/rc.local文件),查看当前selinux状态可以用sestatus。

    可以看到,setenforce 0之后,selinux由强制模式变成了宽容模式。

     

    5.2 依赖包下载

     1). yum install gcc

     

    2). yum install*ltdl* -y (-y yes自动选择)

    5.3 安装Berkeley DB

     1). tar –zxvf db-5.2.36.tar.gz

    先把安装包解压出来,结果如下

    2). cddb-5.2.36/build_unix/ 进行安装前配置

    执行:../dist/configure --prefix=/HIAM/software/berkeleydb-5.2.36

    3). 编译make

    经过2分钟左右的等待后,完成。准备下一步,安装。

    4). 安装make install

    结果如下:

    5). 配置环境变量

    vim /etc/profile

    注意下,这里openldap还没安装,我们只是提前配置下,另外PATH我依旧习惯性的把原PATH写在后面。

    6). 使配置文件修改生效

    source/etc/profile

     

    5.4 安装Openldap

     1). 解压tar –zxvf openldap-2.4.44.tgz

    结果:

     2). 保证后面编译openldap时可以找到lib和include下的库

     

    3). 进入openldap目录

     [root@qingxin software]# cd openldap-2.4.44/

    4). 执行命令进行安装前的配置

     

    [root@qingxinopenldap-2.4.44]# ./configure --prefix=/HIAM/openldap-2.4.44 --enable-syslog--enable-modules --enable-debug --enable-ppolicy --with-tlsCPPFLAGS=-I/HIAM/software/berkeleydb-5.2.36/include/ LDFLAGS=-L/HIAM/software/berkeleydb-5.2.36/lib/

    正常完成,准备编译依赖

    5). 编译依赖

    make depend

    6). 编译

    make

    完成,准备安装。

    7). 安装

    make install

     

    8). 进入到openldap安装后目录,修改密码

     

    注:这里直接粘贴{SSHA}Fds2viLvTTdNyyRzQqy4c4/LPuAZE13t作为密码即可,为了后面密文配置管理员密码。密码明文应该是123456。

    这里注意下,不管什么明文密文管理密码,你需要保留的是这个命令执行完成后的那一串字符:{SSHA}N3O/Xthj3ChOgMkaDdarpxp0uhDsoYT0

    这个需要写到后面的slapd.conf配置文件里面去。这里躺了一趟坑,重点记录下。【ldap_bind: Invalid credentials (49

    [root@qingxin bin]# slappasswd

    New password:

    Re-enter new password:

    {SSHA}N3O/Xthj3ChOgMkaDdarpxp0uhDsoYT0

     

    修改密码想要生效应该需要重启openldap。

    9). 启动openldap

    10). 修改配置文件

    这里注意下,密码和前面保持一致。

    11). 准备初始化.ldif文件

    在bin目录下创建ldif文件。

    [root@qingxinbin]# touch 1.ldif

    [root@qingxinbin]# vim 1.ldif

    内容如下:

    [root@qingxinbin]# vim 2.ldif

    内容如下:

     

    12). 导入ldif文件

    密码是明文123456

    [root@qingxinbin]# ./ldapadd -x -D "cn=Manager,dc=zqx,dc=com" -W -f 1.ldif

    Enter LDAPPassword:

    adding new entry"dc=zqx,dc=com"

     

    [root@qingxinbin]# ./ldapadd -x -D "cn=Manager,dc=zqx,dc=com" -W -f 2.ldif

    Enter LDAPPassword:

    adding new entry"ou=people,dc=zqx,dc=com"

     

    [root@qingxinbin]#

     

    13). 导入slapd关于同步和密码策略的配置

      按文档类似的改一下就好了

     

    14). 开放389端口供外部访问

       默认明文端口389,密文端口636

    15). 导入密码策略

      按文档,类似的改下。遇到一个问题,ldap_add: Invalid syntax (21)。一直改格式都没有用,后来重启系统后终于好了,怀疑是不是有什么缓存之类的东西。

     

    16). JXplorer

     

     

     

    6. phpldapadmin

     6.1 安装php环境

      yuminstall httpd mysql-devel php-mysql php -y

     centos7直接yum install mysql-server会提示没有可用的包,需要自己手动wget获取下。

     php-mysql在centos上兼容性不好,会和php-mysqlnd冲突,暂时选择不安装php-mysql。【yum install httpd php php-bcmathphp-gd php-mbstring php-xml php-ldap】

     

    6.2 安装phpldapadmin

     

     1. 解压

           [root@qingxinsoftware]# tar -zxvf phpldapadmin-1.2.3.tgz

     2. 创建html页面

           [root@qingxinsoftware]# cp -r phpldapadmin-1.2.3 /var/www/html/

           [root@qingxinsoftware]# cd /var/www/html/

           [root@qingxinhtml]# cd phpldapadmin-1.2.3/config/

           [root@qingxinconfig]# cp config.php.example config.php

           [root@qingxinconfig]# vim config.php

    3. vim config.php

     

     

     

    参考文档,根据自己实际的情况修改。

     

    4). 关闭防火墙或暴露端口

    [root@qingxin config]# service httpdrestart

    Redirecting to /bin/systemctl restarthttpd.service

     

    5). 登陆phpldapadmin

     

     http://192.168.15.142/phpldapadmin-1.2.3/htdocs/index.php

     

     

     

    参考:https://www.cnblogs.com/lemon-le/p/6266921.html

    https://www.cnblogs.com/yangxiaofei/p/5699187.html

    https://www.zhukun.net/archives/7963

    https://www.jianshu.com/p/cd6aa994dc21

    http://blog.51cto.com/xiaofengfeng/1953736

     

     

    展开全文
  • IAM -首个区块链信用操作系统白皮书V1.0 IAM基金会2018年6月 1.摘要 IAM Chain是生物识别领域专家Andy Qin发起的公有链项目;IAM以Bio-ID、信用体、信用带宽权证、操作系统为组成构建公链网络系统,致力于真正...

    IAM -首个区块链信用操作系统白皮书V1.0

    IAM基金会2018年6月
    

    1.摘要

    IAM Chain是生物识别领域专家Andy Qin发起的公有链项目;IAM以Bio-ID、信用体、信用带宽权证、操作系统为组成构建公链网络系统,致力于真正实现区块链网络的大规模商业化应用以及打造信用社会经济生态。

    IAM在行业领先的生物特征识别技术的基础上,首创POC信用共识机制,融合分布式计算和存储、人工智能等技术,为未来区块链应用和发展提供可信入口及平台级支持。IAM弥补了单一以身份识别、人工智能为技术核心,单一以信用数据为服务核心,单一以区块链操作系统为平台核心的低附加值的商业模型短板,构建人人“自主可信、信以尽用、用及万象”全新区块链生态格局,实现生态协同增值。

    IAM通过人脸、声纹、指纹多模态生物特征识别及人工智能技术,实现区块链自主数字身份的确立;通过数字身份信用模型和多维度用户数据建立链上数字信用体;用户凭借数字信用体和IAM的合约Store及合约Container技术,可创建所有基于信用的经济活动场景,实现链上信用价值的最大化,实现信用增值变现;IAM还为DApp开发者提供操作系统级支持,DApp开发者可轻松根据业务场景快速进行Dapp开发,并借助IAM可信生态环境,快速实现业务放大增值。

    IAM融合了生物特征身份识别、人工智能、智能合约、零知识证明、差分隐私、环签名、信用回声、数据脱敏及融合、跨链交易等多种技术,以POC信用共识机制为核心约束的信用关系模型来解决点对点的信任问题,以建立“自主、可控、可信的数字身份生态”、“高信用价值的数字金融生态”、“高效能的数字应用生态”、“高安全、便捷的数字宜居生态”为目标,推动全球信用经济社会生态发展。

    2.核心名词定义

    2.1. IAM区块链网络
    IAM区块链网络,简称IAM,是一个真实可信的、去中心化、不可篡改且开放自治的区块链公链网络,为未来区块链数字经济提供可信入口、信用数据及操作系统级支持。

    2.2. POC信用共识证明
    POC信用共识机制是基于节点信用的共识机制,POC信用共识机制是在DPOS的基础上结合节点的信用进行投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。节点的选举将不再以节点所持有的Token为投票权重,而是以节点所拥有的信用为投票权重进行投票。如某节点信用出现了问题,该节点将丧失节点代表的资格,区块链中的全体节点同样具有随时罢免和选举代表的权力,全体节点将根据节点的信用重新投票选举需要补充的节点代表。

    2.3. IAM.BW网络信用带宽权证
    IAM.BW是用户访问网络能够获得的网络带宽及资源的映射,网络将根据用户的信用带宽权证分配网络的带宽及资源。用户带宽权证将与用户信用对应,用户信用的高低决定了其能够获得网络带宽的多少。

    2.4. IAMS(IAM Store IAM商店)
    IAMS是多种智能合约、组件、模块及流程的集合,在该集合中,用户可以按需选购自己所需智能合约、组件、模块及流程,也可以将自己的智能合约、组件、模块及流程在该集合中售卖。

    2.5. IAMCC (IAM Contract Container IAM合约集装箱)
    IAMCC负责对智能合约按需进行重组形成更高层级的智能合约,以实现更高复杂度的业务逻辑。

    2.6. Customized Contract(自定义合约)
    IAM用户可以实现合约的编写,合约的编写不再是工程师的专有权利。

    2.7. Bio-ID
    Bio-ID是以人脸、指纹、声纹多模态生物特征经过抽象后对人进行唯一性标注的标识,Bio-ID身份一旦创立,便无法篡改。Bio-ID更加有效的保护用户身份隐私,Bio-ID将是未来IAM生态系统中的生物特征身份。

    2.8. 信用体
    信用体是IAM网络中的个人多维映射,用户在IAM网络中身份、声誉、征信、偏好、特点等各种信用数据及画像的综合体。IAM网络中的每个信用体与每个人一一对应,是区块链网络中的信用行为主体。

    2.9. 信用回声机
    信用回声是IAM用户在网络中的各种行为对信用产生映射影响,用户的每个行为均会产生信用回声,信用回声会对信用起贡献作用,这种贡献包括对个人信用的提升或者降低。信用回声机是产生信用回声的功能单元。

    2.10. 盲数据贡献
    IAM用户进行链上“数据贡献”时,链上用户将无法获知该数据来源于谁,也无法获知该数据的具体内容。

    2.11. 生物特征数据单向处理
    生物特征数据是用户的核心数据,经过单项处理并抽象后的生物特征数据将无法可逆并还原成原有生物特征,更加有效的保护了用户隐私。

    2.12. 用户数据碎片化
    IAM对用户的数据进行碎片化处理,每个被碎片化的数据都对应一个唯一的加密散列特征,每个数据特征值均有唯一对应的数据,经过碎片化处理后的用户数据,经过分片签名并进行分布式存储,更加有效的保护用户隐私的同时进一步确保了数据的安全。

    2.13. 差分隐私
    差分隐私是一种通过算法消除的个人隐私的技术,可以消除特定的个人隐私信息。

    2.14. 身份零知识证明
    身份零知识证明(Zero-Knowledge Proof),是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信验证者的身份是正确的。

    3.设计理念及创新

    3.1. 设计理念
    区块链的核心是“分布式”与“共识”,比特币自2009年诞生以来,其以总量固定、稀有且价值会不断上升奠定了其作为储值数字资产的地位,几乎成了储值数字资产的代名词。
    但是比特币交易及流通的时效性以及无法进行有效的扩展,使得比特币无法满足现实生活中对支付及相关业务的要求,而且比特币现行机制容易造成算力集中,偏离了原来的去中心化轨道。所以比特币并未全方位获得大家对它的认同。以太坊在比特币的基础上,更进了一步,加入了智能合约,而且人们可以在以太坊上发行自己的Token,具有了很强的扩展性,是大家公认的区块链2.0。 但是以太坊同样存在明显的不足,以太网络拥堵、交易成本较高等问题使得以太坊并无法真正的满足区块链应用落地。而且以太坊容易分叉极易造成贫富分化。EOS在比特币及以太坊的基础上,成功的解决了交易的时效问题,并提供了很多应用开发所需要的基础环境,便捷了区块链应用的落地。但EOS基于DPOS的共识机制,一币一票的节点选举模式,容易让EOS变成“富人”制定规则的游戏。
    鉴于此,IAM围绕以下理念进行了设计:

    3.1.1. 以效率为本,采用动态分片技术,提高区块链的运行效率
    IAM采用动态分片技术,将网络的节点根据交易请求的特点及节点资源的特点进行碎片划分,每个碎片节点仅处理对应特点的交易请求,这种分片机制提高了节点交易的处理速度、提高了TPS;为了确保分片节点的可靠,分片将采用动态机制,每个碎片节点成员都不是固定的,将由选举产生。理论上,IAM动态分片技术可使IAM达到百万每秒的TPS处理能力。

    3.1.2. 以信用为本,构建全民网络,摒弃富人网络,让网络真正实现公平
    IAM采用更为先进的信用共识机制POC(Proof of Credit)及信用权证带宽机制,从节点记账资格竞选、数据记账打包、用户服务请求访问、分布式数据处理、分布式计算协同等各个环节确保其公平及可信程度,并从机制上实现网络真正意义上的去中心化。

    3.1.3. 以人为本,让区块链为生活服务
    IAM采用“以人为本”的理念进行设计,区块链不仅要为经济服务,更要为生活服务。IAM网络通过生物识别为基础创建用户Bio-ID,构建信用体,并为用户提供便捷而安全的服务,让IAM能够应用在日常的各种领域,如:支付领域、打车领域、上网领域、平安小区领域、购物领域、医疗健康领域、教育领域、婚恋领域、职场招聘领域、公众服务领域、信用借贷领域等等。不仅如此,IAM网络为DApp提供了入驻接口,第三方应用可以便捷入驻IAM,为链上用户提供生活服务。

    3.2. 共识机制创新(POC信用共识)
    共识机制是区块链的灵魂,维系着区块链世界的正常运转,目前主流的共识机制包括POW(Proof of Work:工作量证明机制)、POS(Proof of Stake:权益证明机制)、DPOS(Delegated Proof of Stake:授权权益证明机制),这些共识机制在某些方面确实有突出的优势,但却有着致命的劣势,如耗费能源、效率低下、中心化、造成贫富分化等。

    POW通过数学运算,计算出一个满足规则的随机数,最先算出正确答案的节点获得本次记账权,得到记账奖励;POW需要等待多个确认,区块的确认共识达成的周期较长,由于重复计算,POW造成大量的资源浪费,网络性能太低,且容易产生分叉;不仅如此,POW共识机制容易造成算力集中,偏离了原来的去中心化轨道。

    POS是一种升级型的共识机制,根据每个节点所持Token的数量和时间,会获得对等概率的记账权,在一定程度上缩短了共识达成的时间,不再需要大量能源消耗。但是,这降低了POS网络安全性,且极易分叉,同时容易造成贫富分化,最终会逐渐导致区块链网络的中心化。

    DPOS虽然解决了速度与效率的问题,但全面放弃了去中心化,超级节点的选举依赖于节点用户持有Token的多少,这种选举机制依然是一种富人的游戏,而且节点数较少,容易被恶意操控,无法实现真正意义上的去中心化。区块链网络应该是一个以公平公正为核心的网络世界,而不应该以逐利为目的。

    IAM团队基于此,进行了技术革新,首创了基于信用的区块链共识证明算法—POC(Proof of Credit)信用共识证明。

    POC信用共识机制是基于节点信用的共识机制,POC信用共识机制是在DPOS的基础上结合节点的Credit信用进行投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。

    诚信的人管理网络:
    POC信用共识机制中,节点的选举将不再以节点所持有的Token为投票权重,而是以节点所拥有的Credit信用为投票权重,信用只能通过积累产生,无法通过买卖获得;IAM网络希望记账的节点代理应由“诚信的人”选举产生,而不应该是由“富人”选举产生,从而促使区块链网络更加诚信而不是更加逐利。
    POC信用共识机制,不仅拥有DPOS高性能的优点,而且通过信用投票机制,弥补了DPOS趋向“中心化”、“富人化”的缺点,实现了真正意义上的去中心化。

    生态的自我进化:
    IAM网络中的每个信用体都与真实的个人对应,每个人在网络中的行为均会对其信用起到正或负的“累计效应”。“更高”信用的用户不仅可以具有更高权重的节点投票权利及决策权利,也将得到更多的网络带宽及更快的网络响应。这种机制将促使用户更加努力的构建自己的信用体,从而实现网络生态向信用社会的自我进化,形成良性循环。

    天然的网络防攻击能力:
    POC信用共识机制也会让网络变得更安全。由POC衍生出的网络带宽权证机制,将拒绝恶意攻击者的带宽请求及服务响应,相较POS及DPOS而言,恶意攻击者会有更高的攻击成本,因为攻击者构建节点信用比获得更多Token要难得多,因此基于POC信用共识机制的网络具有更高的安全防护能力。

    低分叉概率:
    基于POC信用共识机制的IAM网络分叉概率更低。所有节点具有较高诚信度,且节点之间是协作关系而不是竞争关系,同时节点代表具有除名机制,这使得节点工作在协作中进行,有效防止了分叉的发生。

    3.3. 生态模式创新
    通常区块链网络项目均以提供单一技术为核心,比如提供身份识别、内容与版权、分布式数据存储、支付、点对点打车、区块链游戏、人工智能、物联网等单一技术为核心的区块链项目,无法形成一个能够形成自我成长、自我激励的自循环生态,以单一技术为出发点的区块链项目将面临着如下风险:
    (1) 单一技术极易被竞争超越或者替代。
    (2) 单一技术将会被极少的用户使用,无较强的用户粘性。
    (3) 单一技术缺乏生态构建要素,无法形成生态协同效应,缺少活力,其项目Token(代币)的价值也就大打折扣。

    鉴于此,IAM进行了模式上的创新,主要如下:
    (1) 全新生态经济模型:以经济活动的要素出发设计生态模式。经济活动的第一要素是活动的参与者,IAM为每个参与者均设计了良好的经济模式,让每个IAM参与者都能够获得所需;每个用户的角色不是一成不变的,用户可以根据需要在生态中选择自己的角色,可以是价值的生产者,也可以是价值的传递者,也可以是价值的享用者。价值的生产者因为创造了价值而获得报酬,价值的传递者因为传递了价值而获得报酬,价值的享受者最终获得了价值服务。

    (2) 基础信用保障:建立了各经济活动参与者之间的信用保障。经济活动最重要的基础是交易双方是否可信,没有可信的基础,交易很难达成;相反,有了信用基础,很多经济活动就可以得到自然开展并快速活跃。IAM通过提供这种基础信用保障,从根本上解决了互联网络人与人之间信任问题。

    (3) 按需构建Dapp与智能合约:有了参与者以及有了信任的基础远远不够,无法为经济的活跃带来颠覆性的改变,还需要为各参与者提供必要的经济活动所需的工具,即:按需构建Dapp与智能合约。IAM平台提供了IAMS、IAMCC、自定义合约,流程引擎、组建引擎等工具,用户可以很轻松的使用现有成熟的合约框架或者自己构建满足自己需要的应用或者合约,提高了应用落地、信用变现的效率。

    (4) 用户自我生态的构建:IAM还提供了供生态自我良性循环与生长的方式,用户可以在IAM网络中发行自己的Token,借助平台提供的智能合约与相应工具,用户可以建立自己的生态环境及经济体系。

    4. IAM网络架构体系

    基础层:
    基础层为网络提供基础支撑,为用户提供分布式存储、分布式计算等服务,是IAM基础设施。核心层:定义了网络的共识机制、节点竞选机制、挖矿机制、智能合约以及与其他区块链之间的跨链协议等,是IAM网络的核心。平台层:实现基于生物特征Bio-ID的可信身份的建立、信用体多维画像的建立、数据的隐私防护处理、信用体系的构建以及供DApp进行便捷开发的应用生态框架的建立,为IAM提供全功能支撑。

    包括IAM.MeOS、IAM.Cre及IAM.SEC、IAM.Auth。IAM.SEC是IAM网络的个人数据防护平台;
    IAM.Auth为IAM网络的身份识别平台;
    IAM.Cre是IAM网络的信用底层平台;
    IAM.OS是IAM网络的操作系统开发平台;

    平台层:
    为各种分布式应用开发提供底层及组件化支持。

    服务层:
    为IAM生态内部或者第三方DApp或者其他区块链项目提供身份识别服务、信用数据服务以及便捷开发服务。

    应用层:
    IAM是一个开放的基础性分布式平台网络,为链上用户提供了丰富的应用服务。这些应用涵盖了用户的日常生活、工作等多种场景下的DApp,IAM将率先为用户提供Me钱包与Me去中心化交易所应用;链上用户也可自行构建轻量级应用供他人使用;IAM也为第三方应用服务提供了入驻接口。随着IAM网络的发展,IAM网络中的应用将越来越丰富,用户将获得更多的服务及更多的价值增值点。

    5. IAM愿景

    5.1. 构建首个Bio-ID(生物特征ID)身份区块链
    IAM作为首个以人脸识别、指纹识别、声纹识别等多模态生物特征为对人进行唯一性标注的公链,IAM对用户多模态特征进行特征单向处理并采用差分隐私、零知识证明等技术,建立用户的生物特征ID,即:Bio-ID,用户Bio-ID身份一旦创立,身份便无法篡改,这种标识将更加有效的保护用户身份隐私,Bio-ID将是未来IAM生态系统中的生物特征身份。

    5.2. 打造“信用、安全、便捷”的智慧生活状态
    IAM为网络提供了安全保障、信用保障及便捷保障,用户可以在多种场景下使用IAM。人们不用再携带各种证件、卡片,不用为证明自己身份发愁,也不用为核实他人身份发愁;不用携带钱包,直接使用IAM进行支付;不用为贷款去开具繁琐的征信证明、收入证明及单位的介绍信;不用担心打车会遇到“好色之徒”;不用为了某种需要去下载繁多的App,也不用担心App所提供的服务是否具有较高的质量。因为你在使用IAM…

    5.3. 构建区块链用户信用生态
    信用的核心是真实,传统的信用服务是围绕账号构建出来的信用,而且仅对某几个特定信用维度进行构建,并不能最真实地反映人的整齐情况。IAM从构建真人化区块链身份出发,并围绕其在链上的各种行为,结合人的社交情况等综合性地、全方位地、细粒度地构建用户的画像,从而形成链上信用体。IAM将根据用户的链上活动,采用信用回声机制,逐步充实并完善用户信用体。

    5.4. 构建实现用户价值变现及信用增值生态
    在IAM里,信用将是用户最珍贵的资产。信用可实现增值或变现,如可以以个人信用作为担保进行借款,出借方根据借款方的借款智能合约进行资金的划拨,并形成链上交易记录。用户还可以借助“IAMCC”、“IAMS”及“自定义合约”技术,构建自己所需的各种合约。用户可以在合约中对自己的资产、创意、理念、知识、技能、时间等多种要素进行定价和制定规则,其他用户可根据合约内容和发布者的信用体情况决定参与与否。

    5.5. 为APP开发者提供平台级支持并快速实现商业落地
    IAM的链上用户,人人都是创业者。IAM提供了便于DApp应用构建的组件及模块,DApp服务提供方仅需要借助IAM“流程引擎”、“DOCKER组件”等多个组件,为DApp开发者提供可视化、组件化、智能化的开发操作系统级支持,可快速实现满足DApp服务商所期望的DApp功能要求。
    如此,可让DApp服务商在开发上将节省90%的资金及时间的消耗,DApp服务商将有更多的时间与资源进行商业模式的构建、市场的推广、产品及服务品质的提升;同时IAM还为DApp提供诚信网络用户环境,有助于DApp更快速地、更精准地实现商业落地而产生商业利润。

    6. “自主、可信、可控”的数字身份

    数字身份是互联网的入口,数字身份的自主、可信、可控是区块链身份的核心。现有区块链网络中的身份,虽然从一定程度上实现了身份可控,但并未做到身份自主与身份可信。这一点是区块链应用无法落地的关键原因。

    6.1. 无“自主、可信、可控”数字身份的区块链体系更危险
    无“自主、可信、可控”数字身份的区块链体系将比中心化系统更危险。
    2014年3月,美国数字货币交易所Poloniex被盗,损失12.3%的比特币。
    2015年2月14日,比特儿交易平台冷钱包中的所有BTC盗走,总额为7170个BTC。
    2015年2月23日,比特币钱包运营商比特币存钱罐被盗。区块链采用点对点技术、加密及共识算法等技术,构建了完善的协议与架构,使得区块链网络具有数据不可篡改、自治、信息公开透明等特性。虽然,区块链网络设计得非常严谨,但作为用户身份的私钥的安全与防护却成为整个区块链网的缺陷。通过猜解,黑客或不法分子就可轻易地攻击数字资产权益,给持有人带来资产被盗的风险。用户时常使用热钱包或者冷钱包保管自己的数字资产,但当这些热钱包或冷钱包丢失或者被盗后,其中的数字资产将永久不再属于自己。
    IAM将提供一种基于多模态生物特征识别的密钥保护机制,保护数字资产的安全。IAM采用人体生物特征作为构建身份数字身份ID的必要元素,这些元素包括:人像特征、声纹特征、指纹特征等。每个用户在网络中的一些重要操作均需要按照身份识别分级模型进行对应身份认证,确保操作的安全,保护用户资产。

    6.2. 可信身份的建立
    IAM将按照以下内容进行可信身份的建立:
    (1) 多维身份数据的采集:对用户的身份信息、生物特征信息、职业信息、其他用户信息或自定义的信息进行采集。这个阶段是用户的信息采集的初始阶段。
    (2) 用户账户体系的建立:通过对采集后的生物特征信息进行处理产生IAM网络的Bio-ID,生成用户公私钥对,并对用户数据进行分级。
    (3) 多维身份数据的处理:这些处理包括身份数据脱敏、单向处理,身份数据验证,生物特征数据混淆,身份数据碎片化,生物特征数据学习及融合等。

    6.3. 核心技术
    6.3.1. 多模态生物识别技术
    IAM采用人脸、声纹、指纹多模态生物识别技术,对用户的生物特征数据经过一系列变换处理并进行混淆融合后,形成无法还原成原生生物特征的多模态特征数据并进行抽象形成唯一的链上用户身份标识Bio-ID,可确保解决链上用户身份被冒用、替用的问题,且具有极强的隐私防护能力,弥补了现阶段区块链无法解决的身份识别这一短板。IAM采用IAM.3DfaceRNN技术、IAM.Voiceprint技术、IAM.FingerPrintRNN技术,对链上用户进行身份识别防护,用户可以借助手机或者计算机的摄像头、麦克风、指纹传感器或其他任何满足IAM生物特征识别框架协议的生物特征采集装置进行人脸识别、指纹识别及声纹识别。IAM采用360度全方位人脸及指纹动态识别技术,用户不用刻意端正头部姿势或者手指按压姿势即可完成精准识别,而且活体识别的应用可有效假冒人脸或指纹的模拟攻击;声纹识别方面我们采用随机指令的方式进行声纹防伪。生物特征识别基础流程如下:

    6.3.2. 多模态数据混淆融合
    IAM将用户的人脸特征、指纹特征、声纹特征等多种生物特征数据,进一步抽象,通过混淆处理,形成多模态数据,并以此经过Bio-ID算法生成Bio-ID。IAM网络不会对用户原生数据进行存储。

    6.3.3. 面向交易隐私的环签名技术及零知识证明技术
    相较传统中心化的身份及交易信息隐私防护,IAM为用户数据提供了更高级别安全保障,IAM采用环签名技术对业务交易进行隐私防护,采用零知识证明等技术确保身份证明的同时又能很好的对身份进行防护。
    IAM面向交易的身份环签名的原理如下:
    假定有 n 个用户,每一个用户Ui拥有一个公钥 Yi和与之对应的私钥Xi 。
    环签名是一个能够实现签名者无条件匿名的签名方案,它主要由下述算法组成:
    (1) Setup(ρ):一个概率多项式时间算法(PTA),输入为安全参数ρ,输出为公钥和私钥。Setup为每一个用户 ,产生一个公钥 和私钥 。
    (2) Sign(S,Xi,M):在输入交易消息M和 n 个环成员的公钥 S={ y1 , y2 ,⋯, yn }以及其中一个成员的私钥后,对交易消息M产生一个环状签名R。
    (3) Verify(L,M,R):若R 为M 的环签名则输出“Yes”,否则为“No”。环签名因为其签名隐含的某个参数按照一定的规则组成环状而得名。而在之后提出的许多方案中不要求签名的构成结构成环形,只要签名的形成满足自发性、匿名性和群特性,也称之为环签名。

    6.3.4. 基于生物特征的AI
    深度学习是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。经过区块链赋能后的训练学习,将比传统模式对生物特征识别有更快的训练速度及更好的训练效果,使得生物特征识别的精度比传统模式有质的区别;更精准、更高效的生物特征识别技术,更加促进了区块链网络身份的可信度。

    6.3.5. DApp服务的身份识别
    身份识别是DApp服务的基础,不论是服务的提供者,还是服务的接受者均应该根据IAM对身份的控制要求进行必要的鉴别,以确保服务的安全。
    IAM对身份请求服务进行了类别划分,身份层级划分为三个基础层级,分别如下:
    描述标识级身份服务层
    Bio-ID是用户的唯一的身份ID。处于该层级下的DApp应用在用户的授权下,仅能够获得用户的ID数据,其他数据无法获得。
    自主授权控制身份服务层
    处于该层级下的请求服务,对用户的数据防护,将在用户更细粒度的控制下。
    强制认证身份服务层
    处于该层级下的请求服务,将强制对用户进行身份识别安全防护。比如,钱包类DApp请求服务时候,将强制要求进行生物特征识别,未成功进行身份识别的将无法继续使用相关功能,如Token提取功能;再如:链上打车DApp进项相关服务时,需要对司机进行强制进行生物特征识别,确保司机的身份情况。

    6.4. 基于生物特征防护的Bio-Token钱包
    在IAM网络中,用户将拥有高安全的Token钱包,用户不用担心钱包丢失或者钱包被盗,也不用担心钱包在被开启状态下进行Token提现会被他人操作;因为钱包由用户自己的生物特征数据(人脸识别、指纹识别、声纹识别)进行了多层级防护,用户开启钱包以及在钱包中进行相关重要操作,均需要做生物特征验证,只有验证成功的身份才被允许使用钱包。并且用户在使用钱包的时候,内置于钱包中的离线数据AI会不停地学习用户的识别行为及数据,随着时间的推移,识别会更加精准。

    6.5. 基于生物特征防护的去中心化交易所
    位于IAM中的每个用户均与现实生活中的每个人一一对应。数字资产交易所从比特币诞生以来,就饱受质疑,其中不少交易所涉嫌机器人自动拉盘砸盘操作进行套利。IAM将构建去中心化的信用交易所,每个交易行为均需进行自主可控的生物特征识别,每个交易行为均由真实个人发起。以生物特征识别为保障的去中心化交易所,将杜绝交易所机器人拉盘砸盘行为,确保交易的公平公正性,让所有交易者更多的参考Token本身的价值进行对等交易。

    6.6. 数字资产的安全防护
    IAM中的数字资产,将达到自主控制级防护标准。在IAM网络中,用户的数据、权益等内容会根据用户的具体情况进行分级,网络中的资产、数据、权益等在被访问、被请求的时候,均需要得到用户的授权许可。
    用户将自主控制自身的数据及权益,并可自定义相关信息及权益的开放程度及范围。如:IAM网络中的社交服务DApp需要请求用户的头像数据及称谓数据或者年龄数据,用户可有选择地仅将头像数据及称谓数据提供出去,并有权保护自身的年龄隐私。
    IAM约定了部分常见的自主控制防护标准。这些标准中,涉及到用户身份信息的任何请求、涉及到用户数字资产的任何请求均需按照防护标准进行访问控制,确保行为授权的主体为本人授权,拒绝他人假冒授权或未经授权的访问或黑客的攻击。如:在IAM钱包中进行token的转出操作时,将与传统钱包的转出模式不同,在转出操作时候,需要用户进行人脸识别或者声纹识别或者指纹识别。

    7. “高信用价值”的数字金融

    7.1. 信用
    是人最重要的资产世界上最遥远的距离是面对面的两个人之间没有信任,而世界上最邻近的距离是即便身处地球两端,也彼此信任。信用将是人最重要的资产!人与人之间有了信任,将会建立多种多样的社交连接、经济连接、生活连接;相反,人与人之间缺少信任,即便面对面,也将很难形成有实质意义的活动。而人们往往忽略了信任的价值,忽略了自身信用的好坏对自己的影响。在互联网的今天,信用将对个人生活带来更为深远的影响,生活中的小小行为,都容易对个人产生极大促进或者促退作用。比如:借贷未及时还款将会影响后续的贷款。如果个人有良好的信用,将会具有更多的机会与更快的速度与他人建立链接,产生信用增值。同时,信用是可以经营的,良好的信用经营,将会让信用产生巨大的经济效益与社会效益。

    7.2. 信用生态的构建
    信用生态的建立依赖于多维画像数据采集、信用模型构建、信用数据的分析及应用。IAM通过用户自主申明、引入外部数据、社交盲数据贡献、信用回声等方式进行信用构建。盲数据贡献过程中,用户(贡献者)均可对自己所知晓的用户(被贡献者)进行有效的多维画像及信用描述而获得奖励;链系统根据被贡献用户原有的信用体系及当前的盲数据贡献内容,经过AI信用智能分析及融合技术,对用户信用体进行匹配并融合,最终形成用户的实时信用。IAM将对有效的信用贡献者进行奖励,将对不合格(提供不真实画像数据及信用内容)的行为进行惩戒。另外,用户在链上的每种行为(如链上购物、链上交友等)均将对自身信用产生正负积累效应。

    7.3. 核心技术
    7.3.1. 多维画像
    IAM的每个人都不是一个单维度的个体,单维度也不能够准确的描述区块链网络中的个体;IAM的每个信用体都是一个被全面描述的个体,通过多维度的画像描述,每个信用体在IAM网络中的形象越来越完备、清晰、准确。这些画像内容包括但不限于:自然属性、社会属性、消费行为、社交网络、兴趣偏好、心理特征、经济属性、职业情况、风险承受、教育状况等。
    7.3.2. 盲数据贡献
    盲数据贡献将让IAM网络的每个用户,可以对自己或者他人进行画像数据贡献,但被贡献者将不知道数据贡献者的身份,也无法得知数据内容。这进一步确保了用户的隐私。
    7.3.3. 信用回声机技术
    链上用户的每个信用体,均有信用回声机的参与,信用回声机将对用户现有信用状况及过程信用状况产生信用响应,对用户的每个行为数据均会自动进行信用映射,并根据信用映射模型而产生个人信用回声,进而对用户信用画像进行填补。信用回声机模式将比传统信用构建模式更加高效地、精准地、全面地、隐私地构建用户信用画像。
    7.3.4. 数据AI
    用户及各行为主体,均会产生大量的数据,数据将是用户最宝贵的资源。深度学习技术在信用体的活跃过程中会产生作用。链上信息是海量的,必须通过数据AI,进行深度分析、学习训练,数据才能够得到很好的提炼、管理与运用,使之产生价值。数据AI将对信用体的各个维度进行分析、学习并作出相应的处理,更加精准而全面的构建信用体,进一步推进可信生态的建立。

    8. “高效能”的数字应用

    8.1. 数字应用一站式平台级支持
    区块链相关应用落地相对缓慢,一个重要的原因是因为熟悉区块链技术的人才缺乏,跨学科的技术要求令区块链具有较高的技术门槛,大部分技术人员对区块链异常陌生,区块链市场的火热与技术人才的紧缺严重不匹配。急需一种能够让普通技术人员都能够快速掌握区块链技术的平台出现。现有的区块链公链项目仅仅能够为DApp提供交易服务、分布式存储服务或者单项认证服务,并无法为DApp提供生态级的整体服务,DApp需要从0开始进行程序开发,并从0进行用户的积累,直至产生项目利润;但这种模式下的DApp开发及推广耗时、耗资且效率低下。
    IAM为DApp提供一站式平台级支持,为DApp提供开发资源支持、流量资源支持、数据资源支持、信用支持,能够让DApp得以快速构建、目标用户快速增长,并以用户信用为依托缩短DApp交易中各参与方之间的信任距离,提高DApp中经济活动的效率,降低了运营成本,实现生态增值。
    IAM为开发者提供便捷DApp开发所需底层及上层工具的支持,这些工具包括:协议类组件、资源类组件、安全类组件、合约类组件、流程类组件、界面类组件等多种工具。

    8.2. 核心技术
    8.2.1. 底层协议
    IAM为所有区块链用户,提供身份、信用、业务流、分布式计算、分布式存储等功能模块,并提供相关底层协议、接口、组件供区块链用户使用。
    8.2.2. 侧链技术
    为了扩充IAM网络的应用功能,满足更多的现实场景应用,并提高计算效率,IAM提供了很好的侧链机制,保证网络的可扩展性。IAM主链为侧链提供了其所需要的基础设施及工具,侧链可以共享主链的节点资源,这些资源包括但不限于分布式存储资源、分布式计算资源;节点资源的复用可以更好的实现业务的协同。侧链作为主链的补充,进一步提高了IAM网络的处理能力,并最大程度地利用节点算力,降低算力浪费。侧链还可以发行自己的Token,且可以与主链Token直接兑换。 IAM.Token是IAM网络的主要通证,是IAM网络中的价值传递与激励媒介,是为网络中各参与方提供激励及报酬的主要方式。链上用户可以使用IAM.Token对数字资产进行储存或流转。IAM.Token不仅仅可以在IAM网络中进行流通,还可以在其他区块链网络中进行流通。
    8.2.3. 安全检测
    为了确保IAM中的应用或者智能合约能够在网络中安全运行,不对网络产生破坏性影响,IAM提供了对应的安全检查机制,通过沙箱技术,对应用及智能合约从代码、访问对象控制、权限读取、资源请求等多个维度进行检测及监测,对未达标的对象进行限制。
    8.2.4. Docker
    IAM中的Docker为区块链的DApp提供了便捷的而丰富的开发组件,而这些组件均是面向业务流程设计,如消息类组件、流程类组件、窗体类组件、底层协议类组件等,DApp开发者也可以根据自身需要选择:登录认证类组件、转账类组件、质押类组件等多种组件。而这些组件不仅仅可以应用在IAM区块链网络的DApp开发,还可以应用于其它区块链网络中的DApp开发,旨在简化DApp的开发流程,降低开发难度,为开发者提供高复用组件与工具。随着IAM的持续发展,IAM将开发基于自然语言进行DApp开发的系统支持,让每个链上用户都有可能能够进行链上应用开发,实现业务应用构建。未来,IAM将是一个丰富的应用平台,一个便捷的应用开发平台,每个人都可以将自己的想法变现成DApp,而且将比其他方式开发节约更多时间与资源。
    8.2.5. IAM Store
    IAM Store是一个可供用户或者DApp进行智能合约、组件、流程构建的集合,在IAM Store中,用户可以根据自己的需要选择不同的合约、组件等,并可按需设计流程。IAM Store明确了合约、组件、流程以下要素:定义、内容、条件、执行模拟、定价等内容。 用户可以将编写好的合约、组件、流程在IAM Store中进行出售,可以在IAM Store中购买自己所需要的合约、组件及流程。
    8.2.6. IAMCC
    IAMCC为用户提供了便捷的合约组装技术,让普通用户也能够很好的进行合约的组装,用户可以将很多基础合约通过IAMCC组装成符合业务逻辑的更高级的智能合约,以满足更复杂的业务场景使用。IAMCC提供了很好的合约组装规范,从合约与合约之间的触发条件的衔接、信息的交互、参与主体与客体之间约束均提供了良好的约束机制,而且这些约束机制对于普通用户是通俗易懂的。
    8.2.7. IAM VM
    IAM VM为IAM网络提供了编写与执行智能合约及DApp的Runtime环境。 IAM在设计虚拟机过程中,IAM VM设计一直秉承“极简”、“易于交互”、“安全”、“即时编译运行”的设计理念进行。IAM VM提供了图灵完备的逻辑控制,支持各种主流高级编程语言,提供了灵活的账本数据交互及完备的代码运行安全监测机制;采用基于Stack的架构设计,并使用了可扩展的动态内容技术,通过提供丰富的标准库为开发者提供便捷的开发、调试运行环境。 在IAM VM中,用户或DApp开发者可以模拟运行自己构建的智能合约以及DApp,以确保其满足自己的预期。

    8.3. 信用变现工场
    在IAM网络中,用户可以实现任何希望构建的线上业务场景。用户可以依托自己的信用情况,借助IAMS以及IAMCC创建自己需求的智能合约集,并发布自己的业务,以收获自己的业务价值。

    8.4. DApp构建
    对于更复杂的应用,用户可以选择通过构建独立DApp形式向外界提供服务,IAM为用户提供了流程引擎、组件引擎等必要工具,简化了DApp的构建。基础过程如下:

    9. 社区经济模型

    9.1. 经济模型设计理念
    区块链经济模型是区块链生态建设与发展的核心,IAM秉承以下理念设计了IAM社区经济模型:
    (1) 以人为本、人人平等:IAM网络中,规则对每个人适用。
    (2) 诚信会产生价值,且诚信可以累计:用户诚信将与网络带宽资源及算力匹配,更高的诚信将获得更宽的网络带宽及更高的算力,获得更快捷的服务响应,在同等条件下也将优先获得经济活动的匹配权、决策权。相同诚信度的用户将享受同样的资源及机会分配。资源及机会与用户所持有的Token无关。用户可以通过约束自身行为,在经济活动中逐渐积累自身信用。
    (3) 贡献与获得相对应:IAM网络中的用户可以贡献自身的数据、自身的算力为网络中的其他用户提供便利,用户将获得与其贡献对应的报酬。 如:用户可以贡献人脸识别图片数据,提高IAM的人脸识别准确率,用户将获得与当前训练难度相对应的训练报酬。
    (4) 契约精神,违约行为将受到惩戒:用户以自己信用为依托从事经济活动,智能合约会对违约行为进行强制执行,而且信用回声机也将对用户链上违约进行回声反馈,IAM网络的违约将使违约者无处遁形。
    (5) 数据是有价的:任何第三方在获取用户数据的时,均需要得到用户授权,并为用户数据支付报酬。

    9.2. 经济内在关系
    IAM以下主体构成了IAM经济生态中的要素,他们共同繁荣了IAM网络:
    (1) IAM.Token是IAM网络的通证,可以作为IAM网络中的流通工具。
    (2) IAM.DLP是IAM网络中的DApp及智能合约的开发者。
    (3) IAM.Me是IAM网络中的社区成员及用户。
    (4) IAM.Node节点是IAM网络中的分布式计算主体、分布式资源存储主体、交易记账主体。
    (5) IAM.BW 是IAM网络的带宽权证。IAM.BW是DApp所能够使用的最大带宽与资源,IAM.BW需要DApp使用IAM.Token进行抵押获得;IAM.BW具有动态属性,可以由IAM.Me或IAM.DLP进行实际需要买进及售出。IAM中的每个用户(IAM.Me)可以免费的使用IAM网络,但是IAM对用户的响应由其对应的信用带宽权证(IAM.BW)决定,网络会根据信用带宽权证给用户分配算力及带宽资源。用户的恶意请求以及不诚信行为的积累将使得用户的信用降低并影响信用带宽权证,信用带宽权证低于最低门限值的用户,将无法获得算力与带宽,进而无法获得Dapp的服务。 IAM.Me与IAM.DLP可使用IAM.Token进行支付、捐赠、质押、存储升值等。节点(IAM.Node)将在POC信用共识基础上由IAM.Me及IAM.DLP选举产生。IAM.Me与IAM.DLP可以创建优秀的智能合约、功能组件、流程组件并放置于IAM Store中进行出售而获得IAM.Token。IAM.DLP可以在平台上发行自己的代币,建立自己的生态,代币与IAM.Token之间可以进行兑换,兑换比例将按照市场供需决定。

    9.3. 如何获得IAM.Token
    用户可以从以下几种途径获得Token
    (1) 私募:私募投资者将获得与私募阶段所承诺兑付数量对应的Token。
    (2) IAM网络内部流通:随着IAM应用生态的逐步建立以及IAM技术的逐渐成熟,用户可以在IAM网络中发布自己所需的经济活动或者参与他人的活动而获得Token。
    (3) 挖矿:用户或者节点可以参与算力挖矿或资源挖矿,并获得相应数量的Token。
    (4) 交易所:IAM会陆续上线交易所,用户可以从交易所购买所需数量的Token。
    (5) 跨链获得:IAM支持与其他区块链资产之间的交换,用户可在Token的跨链流通中通过跨链兑换获得更多的Token。
    (6) 对IAM.BW的购入与卖出:IAM支持用户对IAM.BW的动态市场调节,可以以当前IAM.BW的市价进行买进或者卖出而实现Token的增加,当然用户也可能因为市场需求关系造成Token的减少。

    9.4. IAM.Token的流通效应
    IAM.Token 是IAM网络中的价值传输通证,是IAM生态中数据、行为、贡献进行价值量化的工具,也是与其他区块链进行价值交换的媒介。IAM.Token在未来发展中可能会呈现如下效应:
    (1) IAM是一个以信用为基础的去中心化网络,随着IAM生态中DApp越来越多,需要更多的IAM.Token进行流通,将会使得IAM.Token变得稀缺。
    (2) 生态的活跃发展,将使得很大一批投资者会将IAM.Token作为一种储值数字资产,主动锁仓,进一步使得流通中的IAM.Token数量变得稀有。
    (3) 存在部分用户丢失自己钱包,会令IAM.Token的总量逐步减少。
    (4) 随着IAM网络的跨链技术的广泛应用,将有更丰富的第三方区块链的资产需要进行互兑互换,巨大的兑换需求会加剧IAM.Token变得稀缺。
    (5) 随着众多业务的开展,将出现很多种需要对IAM.Token进行冻结锁定的情况,这将使得流通中的IAM.Token数量减少。

    9.5. IAM.Token分配
    IAM.Token是IAM网络上的通证,总量21,000,000,000枚,用于IAM网络及跨链环节中数字资产的交易、流通与支付。
    IAM.Token合理的分配机制,将有利于促进IAM生态系统的健康繁荣发展,分配如下:
    9.5.1. IAM团队:
    10%用于激励早期团队在项目所需技术的探索和开发,发放Token作为回报。Token发行时此部分将被智能合约锁定,1个月后分批解锁。
    9.5.2. IAM 基金会:
    10%,用于IAM项目后期技术研究、开发及运营,作为IAM发展备用Token。
    9.5.3. 早期投资者:
    10%,用于回报早期投资者,对IAM发展过程中在资金、资源、规划、人才辅助等方面作出的贡献。Token发行时锁定,分批次解锁。
    9.5.4. 私募投资者:
    15%,私募投资人是IAM的中坚力量,将长期支持IAM的发展。募集所得全部归IAM基金会所有,用于IAM网络的技术开发及前期运营。未募集的剩余额度归IAM基金会所持有。
    9.5.5. 行业推广:
    10% , 用于IAM平台技术在各主要行业进行应用推广,以增加IAM网络的活跃度,让IAM平台技术为更多的用户使用。
    9.5.6. 生态建设:
    15%,用于IAM生态建设,资助开发者执行有意义的开发计划,设立技术孵化基金,进行用户、生态合作伙伴以及开发者的运营
    9.5.7. 挖矿及网络激励:
    30%,用于鼓励用户的算力贡献、存储资源贡献、数据贡献、网络资源贡献行为,以此提高网络效率、完善网络结构、提高网络活力。
    IAM网络将根据每年全网对IAM.Token的流通情况对IAM.Token进行销毁或产生,销毁或产生比例将由社区决定,但无论如何比例将不超过5%。产生的IAM.Token将全部用于节点计算及生态发展的奖励。

    9.6. IAM社区
    IAM社区是由IAM的爱好者、参与者等成员组成,负责IAM代码的开发、技术推广、项目推进及社区活动的组织筹备等工作。IAM社区是IAM项目能够得以茁壮发展的基础。IAM社区根据不同的社区属性及地域进行细分,不同的社区将赋予不同的社区职能,以确保社区的高效运行。IAM社区现有的社区成员大多来自于国际知名学府、研究机构及知名企业,如:麻省理工大学、哈佛大学、牛津大学、芝加哥大学、加州大学、清华大学、北京大学、中国科学院、苹果公司、IBM、亚马逊、微软、摩根大通、高盛汇丰银行等多家机构,他们为IAM的建设提出了真知灼见并贡献了力量,IAM将欢迎更多的优秀人才的加入。

    10. 合规及声明

    10.1. 白皮书不涉及与证券招标以及承担IAM经营性和IAM相关的风险说明本白皮书是项目阐述的概念性文件,不用于出售与IAM产品及其相关公司的股份、证券或其他受管制产品,也并不是构成任何司法管辖区内的证券或其他任何受管制产品的劝告或征集的投资建议。本白皮书并没有经过任何国家或地区的司法监管机构审查。不能构成任何声明和保证:本白皮书用于说明我们所提出的IAM平台与IAM通证及其他内容,但是IAM基金会明确表示:
    1)本白皮书中描述的任何内容的准确性或完整性,以及其他方式、其他地方发布的与该项目相关的内容,不给予任何声明和保证。
    2)不对任何具有前瞻性、概念性陈述的成就或合理性内容给予任何声明和保证。
    3)白皮书中的任何内容,不作为任何对未来的承诺或陈述的依据。
    4)不承担任何因白皮书的相关人员、相关内容或其他方面而造成的任何损失。不是任何人都可以参与项目:IAM的网络系统和平台并不是每个人都可以参与,适合的可能参与者可能需要完成一细系列步骤,其中包括提供表明身份的信息和文件等。

    10.2. 非授权公司与该项目无关除了IAM基金会,其他任何公司或者机构使用IAM名称、商标或其他标识性文件等内容,并不说明任何方与IAM有关联或认可。

    10.3. 与数字通证IAM.Token相关的风险提示您承认并同意购买或持有IAM.Token以及使用IAM.Token参与IAM有许多风险。在最糟糕的情况下,这可能会导致已购买的全部或部分IAM.Token的损失。这些情况包括但不限于:由于用户个人错误行为造成的风险,由于私钥遗失导致Token丢失的风险,由于私钥泄漏给第三方导致Token丢失的风险,非官方的IAM网络替代的风险,密码学领域的重大技术突破带来的风险,IAM可能会因为其高价值出现被挖矿攻击的风险,IAM Token来自交易所造成的风险,IAM生态开发跟不上IAM Token持有者预期的风险,参与者在面对损失时无法得到保险的风险,IAM解散的风险,相关地区和国家的司法或行政部门的监管政策的风险,其他未知的风险。除上述风险外,还有其他无法预料的风险。这些风险可能会进一步的转化为意料之外的变化或上述风险的组合。您应该在购买IAM.Token之前,对基金会、基金会附属以及IAM团队进行全面的尽职调查,并了解IAM业务框架、使命和愿景。

    11. 持续性改进

    11.1. 文档可持续性修改这只是一个概念白皮书,用来描述将要研发的 IAM 的远景发展目标,随着IAM的主网建设及应用生态的丰富,为了更系统和完善的呈现产品架构及价值和场景的表达,白皮书内容及路线规划存在不时更新和修改的需求,当发生更新和改动时,会将更新版的白皮书放到Github及官网上进行发布,方便后续更新和大家随时查看,也方便大家在阅读白皮书的同时,查看IAM提交的产品代码。

    11.2. 有关技术迭代及公示方式区块链发展日新月异,IAM立志让每个人都可以通过区块链让自身价值最大化,IAM所提供的DApp开发的支持等都会随着应用生态的发展不断优化、迭代、更新,当发生改动和更新时会通过官网(www.iam.bio)或者Twitter 、Facebook 、Wechat等及时发布。

    展开全文
  • mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:...

    <!-- [if !mso]> <mce:style><!-- v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} --> <!-- [endif]--><!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!-- [if !mso]> <object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui> </object> <mce:style><!-- st1/:*{behavior:url(#ieooui) } --> <!-- [endif]--><!-- [if gte mso 10]> <mce:style><!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} --> <!-- [endif]-->

    存储引擎揭秘:基本结构之四——IAM,IAM 链和存储单元


    原文地址:

    http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-IAM-pages-IAM-chains-and-allocation-units.aspx

    译者:正如本文作者所言,本文是以前他的一些文章的结合,以前曾经翻译的相关文章有:

    1 . 《 SQL Server2000 中的 IAM 链》

    原文地址 : http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/24/645803.aspx

    译文地址 : http://blog.csdn.net/misterliwei/archive/2010/09/25/5906035.aspx

    2 . 《 SQL Server2005 中的 IAM 链》

    原文地址 :

    http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/25/under-the-covers-iam-chains-and-allocation-units-in-sql-server-2005.aspx

    译文地址 : http://blog.csdn.net/misterliwei/archive/2010/09/26/5907155.aspx

    正文:

    本文是我以前发表的材料的组合,新加入一些DBCC PAGE 输出。

    IAM

    IAMIndex Allocation Map ,索引分配映射)页用来跟踪单个文件中约4G 大小的空间,跟踪的空间是按4G 字节对齐。被跟踪的这4G 大小的页被称为“GAM 区间GAM Interval )。IAM 页所跟踪的GAM 区间中的空间是属于同一实体的(这里,我选择的是 实体 而没有使用SQL Server 中的 对象 )。

    因为IAM 只是跟踪单个文件里的一个GAM 区间里的空间。若一个数据库包括多个文件,或者一些文件大小超过4G ,并且实体分配的空间恰好跨越多个文件或跨越一个文件的多个GAM 区间,那么你就会看到为了跟踪单个实体的所有空间是如何使用多个IAM 页的了。如果一个实体需要多个IAM 页来跟踪它的所有的区,那么所有的IAM 页必须链在一起,这就是IAM 链的由来。更多内容见下。

    每个IAM 页有两条记录:一个IAM 页头和一个位图。让我们用DBCC PAGE 来看1IAM 页。我用了以前《page split 》文章用的数据库。使用DBCC IND 查看我们创建的表:


    通过查看PageType 列,我们可以看到有一个IAM 页(页类型为10 )的ID 为(1:152 ):

    DBCC TRACEON (3604);

    GO

    DBCC PAGE ('pagesplittest', 1, 152, 3);

    GO

    m_pageId = (1:152) m_headerVersion = 1 m_type = 10
    m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x200
    m_objId (AllocUnitId.idObj) = 68 m_indexId (AllocUnitId.idInd) = 256
    Metadata: AllocUnitId = 72057594042384384
    Metadata: PartitionId = 72057594038386688 Metadata: IndexId = 1
    Metadata: ObjectId = 2073058421 m_prevPage = (0:0) m_nextPage = (0:0)
    pminlen = 90 m_slotCnt = 2 m_freeCnt = 6
    m_freeData = 8182 m_reservedCnt = 0 m_lsn = (18:116:13)
    m_xactReserved = 0 m_xdesId = (0:0) m_ghostRecCnt = 0
    m_tornBits = -1947725876

    Allocation Status

    GAM (1:2) = ALLOCATED SGAM (1:3) = ALLOCATED
    PFS (1:1) = 0x70 IAM_PG MIXED_EXT ALLOCATED 0_PCT_FULL DIFF (1:6) = CHANGED
    ML (1:7) = NOT MIN_LOGGED

    IAM: Header @0x620CC064 Slot 0, Offset 96

    sequenceNumber = 0 status = 0x0 objectId = 0
    indexId = 0 page_count = 0 start_pg = (1:0)

    IAM: Single Page Allocations @0x620CC08E

    Slot 0 = (1:143) Slot 1 = (1:153) Slot 2 = (1:154)
    Slot 3 = (0:0) Slot 4 = (0:0) Slot 5 = (0:0)
    Slot 6 = (0:0) Slot 7 = (0:0)

    IAM: Extent Alloc Status Slot 1 @0x620CC0C2

    (1:0) - (1:272) = NOT ALLOCATED

    关于页头部需要注意:

    • 正如我们所期望的——页类型为10 ,。
    • 前页和后页指针都为NULL, 因为在IAM 链中没有其他的IAM 页。
    • slot 数目为2 :一个是IAM 头记录;另一个是位图。
    • 页几乎满了

    IAM 页头有下面的字段:

    • sequenceNumber
      • 这是IAM 页在IAM 链中的位置值。每一个IAM 页加入到IAM 链时该值增加1
    • status
      • 未用
    • objectId
    • indexId
      • SQL SERVER 2000 及以前版本,这是IAM 页所属的对象和索引的ID2005 和以后的版本这两个字段未用。
    • page_count
      • 字段未用——原来是用来跟踪单页分配数组中页数目。
    • start_pg
      • IAM 页映射了一个GAM 区间。这个字段存储了映射区间的首页ID.
    • 单页分配数组( Single Page Allocations array
      • 这些是从混合分区中分配的页的数组。这个数组只存在IAM 链中的第一个页中(因为整个IAM 链中只需要跟踪8 个单独分配的页)。

    位图占用IAM 页剩下的空间,每一位表示GAM 区间中的每一个区。如果区被分配给该实体,那么对应位就置1 ,否则为0 。很明显,为不同实体映射同一GAM 区域的两个IAM 页不可能有相同的位被置上——DBCC CHECKDB 会检查这个。在上面的DBCC PAGE 输出中,你可以看出没有区分配给表。你会发现输出最多到272 页所在的区—— 这是因为数据文件就这么大。我往表中插入更多的行,然后再次对IAM 页执行DBCC PAGE ,这次DBCC PAGE 输出如下:

    IAM: Single Page Allocations @0x620CC08E

    Slot 0 = (1:143) Slot 1 = (1:153) Slot 2 = (1:154)
    Slot 3 = (1:155) Slot 4 = (1:156) Slot 5 = (1:157)
    Slot 6 = (1:158) Slot 7 = (1:159)


    IAM: Extent Alloc Status Slot 1 @0x620CC0C2

    (1:0) - (1:152) = NOT ALLOCATED
    (1:160) - (1:296) = ALLOCATED
    (1:304) - (1:400) = NOT ALLOCATED

    你会发现所有的单页分配数组都已经满了 , 然后转向分配统一区。第一个有效的区开始于160 页,一直到296 页开始的区。同样注意到文件一定是变大了,因为现在输出显示文件中已经有400 页了。

    关于IAM 页还要注意两件事:

    • IAM 页是从混合区中分配而来的,且这些页不受监控。
    • 一个文件中分配的IAM 也可以用来跟踪另一个文件的区。

    IAM

    如果我们一直增大文件并往表中插入数据,最终我们将需要另一个IAM 页来映射下一个GAM 区间。这就是IAM 链的由来。IAM 链表用来跟踪单个实体上的空间分配。这个链表是不排序的——IAM 页按添加的顺序加入链表中,每个IAM 页有一个数值,同样是以添加顺序增加的。

    “实体”的定义。到底是谁使用IAM 链?这个概念在SQL SERVER 20002005 中区别很大。

    SQL Server2000 中,下面每个实体都有一个IAM 链表:

    • 堆或聚集索引
      • 一个表只能选其一,不能两者皆有。它们的索引ID 分别为0 1
    • 非聚集索引
      • 它的索引ID2250 (就是说只有249 个索引)。
    • 表的完整LOB 存储
      • 对于堆或者聚集索引中的LOB 列,有时也被称为 文本索引 ,它拥有一个固定的索引ID255

    SQL SERVER 2000 及以前版本中每个兑现最多251 链表。我常总结为:在SQL SERVER 2000 中,每一个索引一个IAM 链(如果你还记得IAM 索引分配映射 的话,我觉得还是很贴切的)。

    分配单元(SQL SERVER 2005 及以后版本)

    现在在SQL SERVER 2005 及以后版本中,发生了一些变化。虽然IAM 链和IAM 页与以前是一模一样的,但是它们所对应的东西变了,而且现在一个表可以拥有750000IAM 链!现在IAM 链为三类东西映射分配空间:
    1
    .堆和B 树(B 树是系统用来存储索引的内部结构)
    2
    LOB 数据
    3
    .行溢出数据

    我们称这些分配空间的单元为分配单元(allocation units ),这三类分配单元的相应的内部名称为:
    1
    HOBT 分配单元(发音和指环王中的霍比特人一样)
    2
    LOB 分配单元
    3
    SLOB 分配单元(SMALL –LOB)
    对应的外部名称为:
    1
    IN_ROW_DATA 分配单元
    2
    LOB_DATA 分配单元
    3
    ROW_OVERFLOW_DATA 分配单元

    严格来说,它们不能再被称为IAM 链了,因为它们不再跟踪索引的分配空间了。只是它们还是IAM 页的链表,所以还被称为IAM 链,现在它跟踪的单元叫分配单元(allocation unit )。除了这些,和以前没有任何区别。

    让我们来看看引起变化的SQL SERVER 2005 的新增的3 个特性,这些特性增加了每个表的IAM 链数目的潜力。

    1 .包含列
    这项功能可以在非聚集索引的叶节点中包含非键列。这条特性因为下面三个原因所以非常有用:
    1
    ).当查询结果包含超过16 列或者所有列的总长度大于900 字节时,它允许一个非聚集索引真正地覆盖一个查询(还记得吗?在SQL SERVER 中,一个非聚集索引键不能超过16 列且不能超过900 个字节。)。
    2
    ).它允许不能作为索引键的数据类型包含在非聚集索引(比如text 或者XML 类型)中。
    3
    ).它允许一个非聚集索引覆盖一个查询而又不需要所有的查询列都作为索引键列。因为索引键会包含在B 树的所有层的行中,所以包含列可以使得索引占用的空间更小。

    举个节省空间的例子:假设有一个1 亿行的索引,其键长度为900 字节,但是实际上只有前面2 个整数需作为索引键,其它4 个固定列可以作为包含列。一个900 字节的索引,那么1 页只能包含8 行(比如,fanout8 )。这就是说叶节点需要12500000 页,上一层为1562500…… 做个汇 总,一共需要12500000 + 1562500 + 195313 + 24415 + 3052 + 382 + 48 + 6 + 1 = 14285717 页(包括叶节点以上层的1785717 页)。
    如果我们使用包含列的方法使得键缩为8 个字节,那么B 树的叶节点以上层一行大小为15 字节(包含了一些行的负载,这样fanout 约为537 )。注意叶节 点的fanout 还是8 ,因为存储在叶节点上的数据是一样的。这样还是12500000 页叶节点,但是上一层结点为23278 页。所以总的 为:12500000 + 23278 + 44 + 1 = 12523323 页(包括叶节点以上层的23323 页)。和上面的900 字节的键比较,这节省了1762394 页(12% )或者13.6GB 。当然这个例 子有点夸张,但是节省空间是显而易见的。

    增加包含列这种特性的主要原始是可以真正地覆盖查询。一个覆盖查询是指查询优化器知道从一个非聚集索引中得到所有查询结果,所以就没有必要使用额外的IO 从基表中查询数据就能满足查询,这是非常重大的性能节省。

    现在非聚集索引有了包含列,这些列可以是LOB 数据类型。这就是说SQL SERVER 2005 再也没有必要有一个单独的LOB 分配单元(在SQL SERVER 2000 中有一个单独的text 索引)了,因为每个索引都有自己的LOB 组了。你可能会问我们为什么没有增加单独一组LOB ,然后让各个索引和基表指向这 些LOB 列?我们确实曾经考虑过,但发现它会使问题更加复杂。

    所以,有了这个特性,每个索引需要两个分配单元—— 一个是为数据或索引(HOBT 分配单元),一个为任意的LOB 数据。

    2
    .巨行(Large Rows
    一个一直折磨架构设计师的问题是表的行大小的8060 字节限制。在SQL SERVER 2005 中,我们去除了这个限制。我们解决这个问题的方法是当行的长度太长以至于不能放在一个单独的页中,允许系统把变化长度列(如varchar, sqlvariant )挤出行去。

    那么这些列的值被挤到什么地方去呢?我们有效地将它转换成小的LOB 列。行中列值由一个指向挤出列值的16 字节指针所代替,挤出列就好像是一个LOB 值被 存储在一个独立的分配单元—— 行溢出分配单元(SLOB )中。这些值和正规的LOB 值一样存储在text 页中,只不过用的是一个独立的分配单元,只要当行 中有一列被挤出时就会创建SLOB 分配单元。

    这种巨行特性同样适用于非聚集索引。如果你考虑在非聚集索引中使用包含列,那么你的非聚集索引很容易超过一个页的大小。如果不在非聚集索引上使用行溢出特性,那么我们将刚摆脱了900 字节的限制,又会有8060 字节的限制了。

    现在有了这些特性,每个索引能有三个分配单元——HOBTLOBSLOB 。即使这样,一个表最多也就是有750IAM 链啊(记住IAM 链现在用来映 射分配单元了,所以250 个索引*3 个分配单元=750IAM 链)。但是我前面提到每个表有750000IAM—— 剩下的是从哪儿来啊?

    3
    .分区
    分区给了我们1000 倍的能力。可能你早就知道了,SQL SERVER 2005 中新增的分区特性使表和索引能被分割成一系列的段,每个段被单独存储(更常见的是被存储在单独的文件组中)。分区需要另一文介绍。
    如果表或索引的每个段或分区是单独存储的,那么每个存储就需要它自己的HOBT 分配单元。当然,每个分区可以存储LOB 值,所以每个分区需要一个LOB 分 配单元。还有每个行的行溢出特性,就像未分区时表和索引一样,每个分区中的行会溢出至SLOB 分配单元中。所以每个表或索引的分区都能有3 个分配单元(, 也就有了3IAM 链)。
    那么1000 倍是从哪儿来的呢?这是因为每个表或索引可以有1000 个分区。就是250 索引*1000 分区*3 个分配单元=750000IAM 链。现实中这可能并不会发生,这只是一种可能性。

    展开全文
  • yes DN="CN=email-smtp.eu-central-1.amazonaws.com" A=plain C="250 Ok 010701701ac250c4-6abedeee-4133-4aba-a633-3ca20aac8550-000000" </code></pre> <p>but not Frankfurt SES...
  • Hdparm tool 的应用

    2020-08-18 15:47:44
    硬盘被锁住解锁 Isscsi Hdparm –I /dev/sdx Hdparm –user-master u –security-unlock password /dev/sdx ...hdparm -N VP --yes-i-know-what-i-am-doing /dev/sdx Secure erase hdparm --user-..
  • Capability policies, Resource policies, IAM policies Role delegation Identity Providers Amazon Cognito SAML Custom Identity broker Federation Cross account access EC2 has role, app ...
  • 如果 Access=Yes和 Inline=Yes,并取决于content-type的类型(参见#3和#4),我们则可以通过安装AppCache-manifest来窃取其他用户上传的URL(AppCache中的 相关漏洞 是由我和  @avlidienbrunn 以及 @file...
  • Jerry Wang的Kyma学习笔记-2019-05-13

    千次阅读 2019-05-14 14:11:12
    **In a nutshell** Kyma allows you to connect applications and third-party services in a cloud-native environment. Use it to create extensions for the existing systems, regardless of the language th...
  • Jerry Wang的Kyma学习笔记-2019-05-12

    千次阅读 2019-05-13 22:39:26
    **In a nutshell** Kyma allows you to connect applications and third-party services in a cloud-native environment. Use it to create extensions for the existing systems, regardless of the language th...
  • $ oci iam region list { "data" : [ { "key" : "BOM" , "name" : "ap-mumbai-1" } , { "key" : "FRA" , "name" : "eu-frankfurt-1" } , { "key" : "GRU" , "name" : ...
  • 从零开始内网渗透学习

    千次阅读 2018-06-23 10:00:04
    net user lemon iam@L3m0n /add /domain 将普通域用户提升为域管理员 net group "Domain Admins" lemon /add /domain 8、查看当前计算机名,全名,用户名,系统版本,工作站域,登陆域 C:\Documents and Settings\...
  • Summary 2016 ,My 2016

    热门讨论 2017-02-13 17:25:07
     I know that I am not a potato in this world, Iam somebody, the unique DanielStark in this world , I do want to make a difference in my life, and I want to pursue PHD in my future life, yes I will ...
  • [self.tableView scrollToRowAtIndexPath:lastPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; }); } #pragma mark 表格的数据源 -(NSInteger)tableView:(UITableView *)tableView ...
  • [self.tableView scrollToRowAtIndexPath:lastPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; } #pragma mark 表格的数据源 -(NSInteger)tableView:(UITableView *)tableView ...
  • XMPP - Socket 实现创建聊天室

    千次阅读 2015-04-17 09:09:02
    // 如果要登录,发送的数据格式为 "iam:zhangsan"; // 如果要发送聊天消息,数据格式为 "msg:did you have dinner"; //登录的指令 NSString * loginStr = @ "iam:zhangsan" ; //把Str转成NSData ...
  • Yes 。然后指定适用的值。  如果你想要终端用户既能使用 CloudFront URL 也可以使用亚马逊 S3 URL 来访问对象的话点击 No 。  更多信息请参考 使用源访问身份来限制对你亚马逊 S3 内容的访问 。   Origin ...
  • C语言输入和输出字符串的三种方式

    千次阅读 2019-03-01 21:46:32
    1、字符串的保存 C语言没有string类型,只能用字符数组保存字符串,当字符数组为一维时,可以当做是“字符串”,二维时,为“字符串数组”,即多个字符串。 2、字符串的读取 (1)scanf和printf ...
  • o "IdentitiesOnly=yes" -i my_rsa_key ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com ​​​​​​​​​​​​​​​​​​​​​Connect to your Linux instance from Windows using PuTTY PuTTY does not ...
  • 2011-09-21 11:07:20.438 Database Resource[IAM=PRIMARY]: SetState READ-WRITE-XPTON, phase TEAR-DOWN, External Cond ENABLE, Target Site Handle 0x7fffffff 2011-09-21 11:07:20.453 RSM: DRC's ...
  • She clicks yes, and is forwarded back to NewApp along with a token. NewApp now has permission (with the token) to access Alice’s friend list, without her sharing her credentials directly with New...
  • 英语口语会话五

    2019-07-16 23:12:00
    Yes, I’m going hiking up Mount Baker. 18.你要和我一起去吗? Would you like to join me? I’d love to. 19.我们什么时候见面? What time do you want to meet? How about nine A.M. Sounds good...
  • Seru looked at Rilla for a minute.'Yes,I phoned Adai before I came here.I told him about Zadak and Bel,and about the fires.He asked about you,Kiah.He can't come down at Kisangani airport because Gog ...
  • 如何使用oracheck工具

    2019-06-24 17:11:00
    rac1 Yes Yes Yes Yes Yes orcl1 rac2 Yes Yes Yes Yes No ............. ............. ............. Clusterware patches summary report Total patches ...
  • CAS+SSO原理浅谈

    2016-08-31 14:36:39
     ”yes"ndavid.turing”  的方式,  CAS v2  开始使用了  XML  规范,大大增强了可扩展性,  CAS v3  开始使用  AOP  技术,让  Spring  爱好者可以轻松配置  CAS Server  到现有的应用环境中。 ...
  • log_auth = yes - log authentication requests to the log file log_auth_badpass = no - don't log passwords if request rejected log_auth_goodpass = no - don't log passwords if request accepted 2) LDAP ...
  • iframe在ipad safari的显示

    万次阅读 2013-07-25 11:52:31
    "yes" >    name= "apple-mobile-web-app-status-bar-style"  content= "black" >   <title>wrapScroller demo    rel= "stylesheet"  href= "../style/wrapScroller.css"  type= "text/css" ...
  • iam_role_arn = data.aws_iam_role.chatbot.arn slack_channel_id = "ABCDEADF" slack_workspace_id = local.chatbot_slack_workspace_id sns_topic_arns = [ data.aws_sns_topic.serverless_sumologic_convox...
  •  当系统提示您确认时,请选择 Yes, Terminate。 2. EBS 卷 因为 EBS 存储是用于存储实例数据,所以通常预配置存储会与 EC2 实例同时出现。在默认设置 下,附加在 EC2 实例上的 EBS 卷在实例关闭的时候会自动删除。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 599
精华内容 239
热门标签
关键字:

iamyes