diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md
index 32a7fb1..241f95f 100644
--- a/framework/CHANGELOG.md
+++ b/framework/CHANGELOG.md
@@ -74,6 +74,7 @@ Yii Framework 2 Change Log
 - Enh #1973: `yii message/extract` is now able to generate `.po` files (SergeiKutanov, samdark)
 - Enh #1984: ActionFilter will now mark event as handled when action run is aborted (cebe)
 - Enh #2003: Added `filter` property to `ExistValidator` and `UniqueValidator` to support adding additional filtering conditions (qiangxue)
+- Enh #2051: Do not save null data into database when using RBAC (qiangxue)
 - Enh: Added `favicon.ico` and `robots.txt` to default application templates (samdark)
 - Enh: Added `Widget::autoIdPrefix` to support prefixing automatically generated widget IDs (qiangxue)
 - Enh: Support for file aliases in console command 'message' (omnilight)
diff --git a/framework/rbac/DbManager.php b/framework/rbac/DbManager.php
index 111bf0a..c203586 100644
--- a/framework/rbac/DbManager.php
+++ b/framework/rbac/DbManager.php
@@ -449,7 +449,7 @@ class DbManager extends Manager
 				'type' => $type,
 				'description' => $description,
 				'biz_rule' => $bizRule,
-				'data' => serialize($data),
+				'data' => $data === null ? null : serialize($data),
 			])
 			->execute();
 		return new Item([
@@ -496,7 +496,7 @@ class DbManager extends Manager
 			->queryOne();
 
 		if ($row !== false) {
-			if (($data = @unserialize($row['data'])) === false) {
+			if (!isset($row['data']) || ($data = @unserialize($row['data'])) === false) {
 				$data = null;
 			}
 			return new Item([