Running a stored procedure that selects and inserts into tables in SQL Server

No, you do not need to grant explicit permission on Table1 and Table2, it's one of the purposes of embedding code in a stored procedure and it's not a problem. It is here that the encapsulation function comes into effect.

Please check the link below from Microsoft:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/managing-permissions-with-stored-procedures-in-sql-server

Running stored procedures

Stored procedures take advantage of the chaining of property rights to provide access to the data, so users do not need explicit permission to access database objects. A property string exists when objects that connect sequentially are owned by the same user. For example, a stored procedure may call other stored procedures or a stored procedure may access multiple tables. If all the objects in the execution chain have the same owner, SQL Server checks only the EXECUTE permission of the caller, and not the caller's permissions on others. objects. Therefore, you must only grant EXECUTE permissions on the stored procedures. you can revoke or deny all permissions on the underlying tables.

use the code below to grant the permission to run:

USE database_name
go
GRANT EXECUTE ON USP_NAME
TO username;
GO

The above hope helps.