code: func (e *GrantExec) grantColumnPriv(priv *ast.PrivElem, user *ast.UserSpec) error {
  	dbName, tbl, err := getTargetSchemaAndTable(e.ctx, e.Level.DBName, e.Level.TableName, e.is)
  	if err != nil {
  		return err
  	}
  
  	for _, c := range priv.Cols {
  		col := table.FindCol(tbl.Cols(), c.Name.L)
  		if col == nil {
  			return errors.Errorf("Unknown column: %s", c)
  		}
  		asgns, err := composeColumnPrivUpdateForGrant(e.ctx, priv.Priv, user.User.Username, user.User.Hostname, dbName, tbl.Meta().Name.O, col.Name.O)
  		if err != nil {
  			return err
  		}
  		sql := fmt.Sprintf(`UPDATE %s.%s SET %s WHERE User='%s' AND Host='%s' AND DB='%s' AND Table_name='%s' AND Column_name='%s';`, mysql.SystemDB, mysql.ColumnPrivTable, asgns, user.User.Username, user.User.Hostname, dbName, tbl.Meta().Name.O, col.Name.O)
  		_, _, err = e.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(e.ctx, sql)
  		if err != nil {
  			return err
  		}
  	}
  	return nil
  }
docs: // grantColumnPriv manipulates mysql.tables_priv table.