Use additional table for roles:
CREATE TABLE ROLES (ID INT, NAME VARCHAR(30), PRIMARY KEY(ID));
INSERT INTO ROLES (ID, NAME) VALUES(1, 'Publisher');
INSERT INTO ROLES (ID, NAME) VALUES(2, 'Editor');
INSERT INTO ROLES (ID, NAME) VALUES(3, 'Viewer');
Then your PERMISSIONS table could look as follows:
CREATE TABLE PERMISSIONS (
USER_ID INT NOT NULL,
Where does the new data come from? Do you just manually type it?
If the data is coming from an application, you may declare a variable with its ID then before insert it, you make a select query that will count the rank of the new data before it's added to the table.
If you insert data one by one, then declaring variable is your best choice. You just need ...