区块链基于mysql_ChainSQL——基于区块链的数据库应用平台

本文介绍了区块链技术中行级控制的概念,它允许在建表时设定针对增删改查的条件,确保数据操作的安全性和精确性。在百望发票项目的案例中,行级控制用于限制API接口的插入、更新和查询操作,如插入时to2字段必须与账户地址匹配,更新仅允许特定条件下的字段变更,查询则限制为特定用户的记录。这一功能增强了数据安全性,防止了未授权的访问和修改。
摘要由CSDN通过智能技术生成

4. 行级控制

建表时可以对增删改查权限分别进行条件设置,只有满足条件的记录方可被操作,精确度到行(见示意图) 。

61bd456f3462774bf2ffd3489e3c6197.png

应用场景:在我们做业务的时候,经常会出现多个用户通过ChainSQL访问同一张表的情况,为了防止用户对表的数据随意修改,我们提出了行级控制的概念,通过在建表时指定操作条件,可以将对表的操作力度控制在行级。

目前支持的功能:

插入:

1.指定某列默认插入当前操作账户

2.指定某列默认插入交易的hash值

3.设置插入条数限制

更新:

1.设置可更新字段集合

2.设置更新条件

删除:设置删除条件(若设置了插入条数限制条件,删除条件中必须做相应的账户设置)

查询:设置查询条件

举例说明:

建表时指定行级控制规则如下:

{

"tx_json": {

"TransactionType": "TableListSet",

"Account": "zP8Mum8xaGSkypRgDHKRbN8otJSzwgiJ9M",

"Tables":[

{

"Table":{

"TableName":"tableWithRule"

}

}

],

"OpType": 1,

"Raw": [

{"field":"id","type":"int","length":11,"PK":1,"NN":1,"UQ":1},

{"field":"age","type":"int"},

{"field":"name","type":"varchar","length":32},

{"field":"account","type":"varchar","length":64},

{"field":"txid","type":"varchar","length":64}

],

"OperationRule":{

"Insert":{

"Condition":{"account":"$account","txid":"$tx_hash"},

"Count":{"AccountField":"account","CountLimit":5}

},

"Update":{

"Condition":{"$or":[{"age":{"$le":28}},{"id":2}]},

"Fields":["age"]

},

"Delete":{

"Condition":{"account":"$account"}

},

"Get":{

"Condition":{"id":{"$ge":3}}

}

}

}

}

以上命令中指定的增删改查条件如下:

插入:

1.account字段值为执行插入交易时的账户地址,不写会自动填充

2.Txid字段值为执行插入交易时的交易hash值,不写会自动填充

3.每个账户最多只能插入5条数据到表中

更新:

1.只能更新表中的age字段

2.只能更新age <= 28 或 id=2的记录

删除: 删除记录A的账户必须与记录A中account字段的值一致(与插入条数对应)

查询:只有满足id >=3的记录才能被查询出来

注意事项: 使用行级控制功能的不能为加密表

案例:

百望发票项目:

“税务+区块链”应用采用API接口的方式进行集成。区块链接口满足的业务包括:

1. 创建wallet接口

2. 查询wallet ID接口

3. 发票写入接口

4. 发票读取接口

5. 发票状态维护接口

接口形式:Restful

信息流向:

1. from:baiwang

2. to1:消费者

3. to2:销货企业

4. to3:报销入账企业

项目应用的行级控制功能:

1.插入的限制条件to2字段值必须与插入账户相同:

{

"Insert":{

"Condition":{"to2":"$account"}

}

}

说明:Condition指定插入交易的账户地址("Account"的值)必须与交易中Raw字段的to2字段值值相同

2.更新目前可以限制更新字段与更新条件:

{

"Update":{

"Condition":{"$or":[{"to2":"$account"},{"to3":"$account"}]},

"Fields":["state"]

}

}

Condition指定更新满足的条件:to2的值等于当前交易(Update)的账户地址 或 to3的值等于当前交易(Update)的账户地址

Fields字段指定更新只能更新state字段

3.查询条件

{

"Condition":{"$or":[{"to1":"$account"},{"to2":"$account"},{"to3":"$account"}]}

}

说明:只有to1/to2/to3指定的用户可以查询本条记录

最终OperationRule取值:

{

"Insert":{

"Condition":{"to2":"$account"}

},

"Update":{

"Condition":{"$or":[{"to2":"$account"},{"to3":"$account"}]},

"Fields":["STATE"]

},

"Get":{

"Condition":{"$or":[{"to1":"$account"},{"to2":"$account"},{"to3":"$account"}]}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值