21、XML-BB模型:保护XML文档中的关系

XML-BB模型:保护XML文档中的关系

1. 现有访问控制模型的问题

在处理XML文档的访问控制时,一些现有模型存在表达访问控制需求的困难。例如,使用最后匹配原则时,可能会导致不符合预期的访问权限分配。以John和Mary的访问控制需求为例,某些模型无法准确表达他们的访问权限。

具体来说,在一个示例中,根据某些规则组合,John最终被允许读取每个Hospital节点及其子节点,这显然不是我们期望的结果。同样,对于Mary的访问控制需求,这些模型也无法有效表达。类似的问题在应用其他访问控制模型时也会出现。

2. 新的解决方案:引入Block概念

为了解决上述问题,我们提出使用新的Block概念来指定XML文档的访问控制模型。通过这种方式,John和Mary的访问控制需求可以用不同的块来建模:

– BEGIN BLOCK HOSPITAL
GRANT read /P ON /Hospital
TO John, Mary
REVOKE read /P ON
/Hospital/Department/Patient
TO John, Mary
END BLOCK HOSPITAL

– BEGIN BLOCK PATIENT
GRANT read ON /Hospital TO Mary
GRANT read /P /S ON
/Hospital/Department/Patient
TO John, Mary
END BLOCK PATIENT

在块内部,我们同时应用累积原则和连接性原则;而在不同块之间,仅应用累积原则,不应用连接性原则

===== TEST FINISHED OK ===== [dragon@localhost ova_temp]$ export LIBGUESTFS_BACKEND=direct [dragon@localhost ova_temp]$ export LIBGUESTFS_DEBUG=1 [dragon@localhost ova_temp]$ sudo -E virt-v2v -i disk win2003-disk1.vmdk -o local -os ~/vms/win2003/ libguestfs: create: flags = 0, handle = 0x5628d0bb1710, program = virt-v2v libguestfs: create: flags = 0, handle = 0x5628d0bb1da0, program = virt-v2v [ 0.0] Opening the source -i disk win2003-disk1.vmdk libguestfs: create: flags = 0, handle = 0x5628d0bb43f0, program = virt-v2v libguestfs: command: run: qemu-img --help | grep -sqE -- '\binfo\b.*-U\b' libguestfs: command: run: qemu-img libguestfs: command: run: \ info libguestfs: command: run: \ -U libguestfs: command: run: \ --output json libguestfs: command: run: \ ./win2003-disk1.vmdk libguestfs: parse_json: qemu-img info JSON output:\n{\n "virtual-size": 42949672960,\n "filename": "./win2003-disk1.vmdk",\n "cluster-size": 65536,\n "format": "vmdk",\n "actual-size": 2682425344,\n "format-specific": {\n "type": "vmdk",\n "data": {\n "cid": 2370822867,\n "parent-cid": 4294967295,\n "create-type": "streamOptimized",\n "extents": [\n {\n "compressed": true,\n "virtual-size": 42949672960,\n "filename": "./win2003-disk1.vmdk",\n "cluster-size": 65536,\n "format": ""\n }\n ]\n }\n },\n "dirty-flag": false\n}\n\n [ 0.0] Creating an overlay to protect the source from being modified libguestfs: create: flags = 0, handle = 0x5628d0bb5ab0, program = virt-v2v libguestfs: command: run: qemu-img --help | grep -sqE -- '\binfo\b.*-U\b' libguestfs: command: run: qemu-img libguestfs: command: run: \ info libguestfs: command: run: \ -U libguestfs: command: run: \ --output json libguestfs: command: run: \ /var/tmp/v2vovl4d77de.qcow2 libguestfs: parse_json: qemu-img info JSON output:\n{\n "backing-filename-format": "vmdk",\n "virtual-size": 42949672960,\n "filename": "/var/tmp/v2vovl4d77de.qcow2",\n "cluster-size": 65536,\n "format": "qcow2",\n "actual-size": 200704,\n "format-specific": {\n "type": "qcow2",\n "data": {\n "compat": "1.1",\n "lazy-refcounts": false,\n "refcount-bits": 16,\n "corrupt": false\n }\n },\n "full-backing-filename": "/home/dragon/ova_temp/win2003-disk1.vmdk",\n "backing-filename": "/home/dragon/ova_temp/win2003-disk1.vmdk",\n "dirty-flag": false\n}\n\n libguestfs: create: flags = 0, handle = 0x5628d0bb72d0, program = virt-v2v libguestfs: command: run: qemu-img --help | grep -sqE -- '\binfo\b.*-U\b' libguestfs: command: run: qemu-img libguestfs: command: run: \ info libguestfs: command: run: \ -U libguestfs: command: run: \ --output json libguestfs: command: run: \ /var/tmp/v2vovl4d77de.qcow2 libguestfs: parse_json: qemu-img info JSON output:\n{\n "backing-filename-format": "vmdk",\n "virtual-size": 42949672960,\n "filename": "/var/tmp/v2vovl4d77de.qcow2",\n "cluster-size": 65536,\n "format": "qcow2",\n "actual-size": 200704,\n "format-specific": {\n "type": "qcow2",\n "data": {\n "compat": "1.1",\n "lazy-refcounts": false,\n "refcount-bits": 16,\n "corrupt": false\n }\n },\n "full-backing-filename": "/home/dragon/ova_temp/win2003-disk1.vmdk",\n "backing-filename": "/home/dragon/ova_temp/win2003-disk1.vmdk",\n "dirty-flag": false\n}\n\n [ 0.1] Opening the overlay libguestfs: create: flags = 0, handle = 0x5628d0bb99f0, program = virt-v2v libguestfs: launch: program=virt-v2v libguestfs: launch: identifier=v2v libguestfs: launch: version=1.40.2libvirt libguestfs: launch: backend registered: unix libguestfs: launch: backend registered: uml libguestfs: launch: backend registered: libvirt libguestfs: launch: backend registered: direct libguestfs: launch: backend=direct libguestfs: launch: tmpdir=/tmp/libguestfssJzX3j libguestfs: launch: umask=0022 libguestfs: launch: euid=0 libguestfs: begin building supermin appliance libguestfs: run supermin libguestfs: command: run: /usr/bin/supermin libguestfs: command: run: \ --build libguestfs: command: run: \ --verbose libguestfs: command: run: \ --if-newer libguestfs: command: run: \ --lock /var/tmp/.guestfs-0/lock libguestfs: command: run: \ --copy-kernel libguestfs: command: run: \ -f ext2 libguestfs: command: run: \ --host-cpu x86_64 libguestfs: command: run: \ /usr/lib64/guestfs/supermin.d libguestfs: command: run: \ -o /var/tmp/.guestfs-0/appliance.d supermin: version: 5.1.19 supermin: rpm: detected RPM version 4.15 supermin: package handler: fedora/rpm supermin: acquiring lock on /var/tmp/.guestfs-0/lock supermin: if-newer: output does not need rebuilding libguestfs: finished building supermin appliance libguestfs: begin testing qemu features libguestfs: checking for previously cached test results of /usr/bin/qemu-kvm, in /var/tmp/.guestfs-0 libguestfs: loading previously cached test results libguestfs: qemu version: 4.1 libguestfs: qemu mandatory locking: yes libguestfs: qemu KVM: enabled libguestfs: finished testing qemu features /usr/bin/qemu-kvm \ -global virtio-blk-pci.scsi=off \ -no-user-config \ -enable-fips \ -nodefaults \ -display none \ -machine accel=kvm:tcg \ -cpu host \ -m 2150 \ -no-reboot \ -rtc driftfix=slew \ -no-hpet \ -global kvm-pit.lost_tick_policy=discard \ -kernel /var/tmp/.guestfs-0/appliance.d/kernel \ -initrd /var/tmp/.guestfs-0/appliance.d/initrd \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-pci,rng=rng0 \ -device virtio-scsi-pci,id=scsi \ -drive file=/var/tmp/v2vovl4d77de.qcow2,cache=unsafe,format=qcow2,copy-on-read=on,discard=unmap,id=hd0,if=none \ -device scsi-hd,drive=hd0 \ -drive file=/var/tmp/.guestfs-0/appliance.d/root,snapshot=on,id=appliance,cache=unsafe,if=none,format=raw \ -device scsi-hd,drive=appliance \ -device virtio-serial-pci \ -serial stdio \ -device sga \ -chardev socket,path=/tmp/libguestfsMJl3al/guestfsd.sock,id=channel0 \ -device virtserialport,chardev=channel0,name=org.libguestfs.channel.0 \ -netdev user,id=usernet,net=169.254.0.0/16 \ -device virtio-net-pci,netdev=usernet \ -append "panic=1 console=ttyS0 edd=off udevtimeout=6000 udev.event-timeout=6000 no_timer_check printk.time=1 cgroup_disable=memory usbcore.nousb cryptomgr.notests tsc=reliable 8250.nr_uarts=1 root=/dev/sdb selinux=0 guestfs_verbose=1 guestfs_network=1 TERM=xterm guestfs_identifier=v2v" qemu-kvm: Parameter 'type' expects a netdev backend type libguestfs: child_cleanup: 0x5628d0bb99f0: child process died libguestfs: sending SIGTERM to process 222751 virt-v2v: error: libguestfs error: guestfs_launch failed, see earlier error messages If reporting bugs, run virt-v2v with debugging enabled and include the complete output: virt-v2v -v -x [...] libguestfs: closing guestfs handle 0x5628d0bb99f0 (state 0) libguestfs: command: run: rm libguestfs: command: run: \ -rf /tmp/libguestfssJzX3j libguestfs: command: run: rm libguestfs: command: run: \ -rf /tmp/libguestfsMJl3al libguestfs: closing guestfs handle 0x5628d0bb72d0 (state 0) libguestfs: closing guestfs handle 0x5628d0bb5ab0 (state 0) libguestfs: closing guestfs handle 0x5628d0bb43f0 (state 0) libguestfs: closing guestfs handle 0x5628d0bb1da0 (state 0) libguestfs: closing guestfs handle 0x5628d0bb1710 (state 0) [dragon@localhost ova_temp]$
11-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值