SQL Server Table level access only

Hi all,

Hopefully a basic one here...

I'm familiar with granting users access to a whole database (Security > Logins > New Login > User Mapping > then applying db_datareader for example).

However, in this case I don't want to release the whole database to a particular user. Instead, I just want to give them read only access to 3 or 4 tables only within that database.

I read elsewhere that I could grant some public access using the above steps (Security > Logins > New Login > User Mapping > public).
Then, to apply the table level access, I could go into the chosen Database > Tables > Find the specific table > Properties > Permissions > Search for user and apply.

Should this give only table level access - and more importantly, I want to be sure it would not lock down the access to this individual only.

Or is there a better way to approach this? Thanks in advance.

Yes, there is a better approach. The actual SQL commands (not the gui).

From SSMS, in Object Explorer, left-click on your db name to select it.
Then use the "New Query" button to open a query window.
In that window, type and run the command:

GRANT SELECT ON dbo.table_name1, dbo.table_name2 /, .../ TO [your_user_name_here];

That will give that user read-only access to the listed table(s). It will not block anyone else's access to those tables.

Note that if you're going to be doing this a lot (and there is a good chance you will) it's better to create roles in the database and grant permissions to them and then add the appropriate users to the necessary roles. This becomes a lot more manageable over time because when a new user needs the same access you can just put them in the role, rather than having to go and attempt to figure out what individual permissions need to be granted.